many changes

This commit is contained in:
Sean Kovacs 2025-12-14 00:38:59 -05:00
commit 6641cfac30
Signed by: sckova
GPG key ID: 00F325187C68651A
15 changed files with 527 additions and 515 deletions

View file

@ -10,9 +10,6 @@ let
in
{
home.packages = with pkgs; [
swaybg
swaylock
fuzzel
xdg-desktop-portal
brightnessctl
qt6Packages.qt6ct
@ -26,477 +23,10 @@ in
recursive = true;
force = true;
};
".config/fuzzel/colors.ini" = {
text = builtins.readFile (
"${catppuccin-fuzzel}/themes/catppuccin-${config.catppuccin.flavor}/${config.catppuccin.accent}.ini"
);
force = true;
};
".config/fuzzel/fuzzel.ini" = {
text = ''
include = /home/sckova/.config/fuzzel/colors.ini
font = "Noto Sans:size=12"
terminal = "kitty"
icons-enabled = yes
icon-theme = "Colloid-Dark"
layer = "overlay"
'';
force = true;
};
".config/qt5ct" = {
source = ./qt/qt5ct;
recursive = true;
force = true;
};
".config/qt6ct" = {
source = ./qt/qt6ct;
recursive = true;
force = true;
};
};
gtk = {
enable = true;
iconTheme = {
name = "Colloid-Dark";
package = pkgs.colloid-icon-theme;
};
cursorTheme = {
name = "catppuccin-${config.catppuccin.flavor}-${config.catppuccin.accent}-cursors";
package = pkgs.catppuccin-cursors."${config.catppuccin.flavor}${config.catppuccinUpper.accent}";
size = 24;
};
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = true;
};
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = true;
};
};
qt = {
enable = true;
# the following will be possible in NixOS 26.05
# https://github.com/nix-community/home-manager/commit/f9d45d664ed06a11861d0ba29e34f390c07bf62e
# until this flake is updated, it will use the configs as implemented above
# qt5ctSettings = {
# Appearance = {
# style = "Breeze";
# icon_theme = config.gtk.iconTheme.name;
# standar_dialogs = "kde";
# };
# Fonts = {
# fixed = "\"NotoSansM Nerd Font Mono,12\"";
# general = "\"Noto Sans,12\"";
# };
# };
# qt6ctSettings = {
# Appearance = {
# style = "Breeze";
# icon_theme = config.gtk.iconTheme.name;
# standar_dialogs = "kde";
# };
# Fonts = {
# fixed = "\"NotoSansM Nerd Font Mono,12\"";
# general = "\"Noto Sans,12\"";
# };
# };
};
xsession = {
enable = true; # only needed for session variable injection
windowManager.command = "niri"; # launches niri directly
enable = true;
windowManager.command = "niri";
};
# https://github.com/sodiboo/niri-flake/blob/main/docs.md
programs.niri.settings = {
screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png";
hotkey-overlay.skip-at-startup = true;
prefer-no-csd = true;
gestures.hot-corners.enable = false;
spawn-at-startup = [
{
command = [
"swaybg"
"-i"
"/home/sckova/.local/share/dailywallpaper.jpg"
];
}
];
overview = {
backdrop-color = pkgs.catppuccin.${config.catppuccin.flavor}.crust;
workspace-shadow.enable = false;
};
input = {
focus-follows-mouse = {
enable = true;
max-scroll-amount = "0%";
};
keyboard = {
numlock = false;
repeat-delay = 600;
repeat-rate = 25;
};
mouse = {
enable = true;
accel-profile = "adaptive";
natural-scroll = true;
};
touchpad = {
enable = true;
accel-profile = "adaptive";
natural-scroll = true;
tap = false;
drag = false;
};
};
environment = {
QT_QPA_PLATFORM = "wayland";
DISPLAY = null;
};
outputs = {
"eDP-1" = {
scale = 1.75;
};
"HDMI-A-1" = {
scale = 2;
};
};
cursor = {
hide-when-typing = true;
hide-after-inactive-ms = 2000;
size = config.gtk.cursorTheme.size;
theme = config.gtk.cursorTheme.name;
};
layout = {
gaps = 4;
background-color = pkgs.catppuccin.${config.catppuccin.flavor}.mantle;
default-column-width = {
proportion = 0.5;
};
preset-column-widths = [
{ proportion = 1.0 / 3.0; }
{ proportion = 1.0 / 2.0; }
{ proportion = 2.0 / 3.0; }
];
border = {
enable = true;
width = 1;
active.color = pkgs.catppuccin.${config.catppuccin.flavor}.${config.catppuccin.accent};
inactive.color = pkgs.catppuccin.${config.catppuccin.flavor}.surface0;
urgent.color = pkgs.catppuccin.${config.catppuccin.flavor}.maroon;
};
focus-ring = {
enable = false;
width = 1;
active.color = pkgs.catppuccin.${config.catppuccin.flavor}.${config.catppuccin.accent};
inactive.color = pkgs.catppuccin.${config.catppuccin.flavor}.surface0;
urgent.color = pkgs.catppuccin.${config.catppuccin.flavor}.maroon;
};
shadow = {
enable = true;
spread = 5;
offset.x = 0;
offset.y = 5;
softness = 30;
color = pkgs.catppuccin.${config.catppuccin.flavor}.base + "77";
};
};
window-rules = [
{
matches = [
{
app-id = "firefox$";
title = "^Picture-in-Picture$";
}
];
open-floating = true;
default-floating-position = {
x = 32;
y = 32;
relative-to = "bottom-left";
};
}
{
geometry-corner-radius = {
top-left = 16.0;
top-right = 16.0;
bottom-left = 16.0;
bottom-right = 16.0;
};
clip-to-geometry = true;
}
{
matches = [
{
app-id = "openmw";
title = "OpenMW";
}
];
open-maximized = true;
focus-ring.enable = false;
border.enable = false;
shadow.enable = false;
}
];
binds = {
"Mod+Shift+Slash".action.show-hotkey-overlay = { };
"Mod+T" = {
action.spawn = [ "kitty" ];
hotkey-overlay.title = "Open a Terminal: kitty";
};
"Mod+Space" = {
action.spawn = [
"sh"
"-c"
"noctalia-shell ipc call launcher toggle"
];
hotkey-overlay.title = "Run an Application: Noctalia app launcher";
};
"Super+Alt+L" = {
action.spawn = [ "swaylock" ];
hotkey-overlay.title = "Lock the Screen: swaylock";
};
"Super+Alt+S" = {
action.spawn = [
"sh"
"-c"
"pkill orca || exec orca"
];
allow-when-locked = true;
hotkey-overlay.title = "Orca screen reader";
};
"XF86AudioRaiseVolume" = {
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.05+"
];
allow-when-locked = true;
};
"XF86AudioLowerVolume" = {
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.05-"
];
allow-when-locked = true;
};
"Shift+XF86AudioRaiseVolume" = {
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.01+"
];
allow-when-locked = true;
};
"Shift+XF86AudioLowerVolume" = {
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.01-"
];
allow-when-locked = true;
};
"XF86AudioMute" = {
action.spawn = [
"wpctl"
"set-mute"
"@DEFAULT_AUDIO_SINK@"
"toggle"
];
allow-when-locked = true;
};
"XF86AudioMicMute" = {
action.spawn = [
"wpctl"
"set-mute"
"@DEFAULT_AUDIO_SOURCE@"
"toggle"
];
allow-when-locked = true;
};
"XF86MonBrightnessUp" = {
action.spawn = [
"/home/sckova/.config/niri/scripts/brightness.sh"
"1"
];
allow-when-locked = true;
};
"XF86MonBrightnessDown" = {
action.spawn = [
"/home/sckova/.config/niri/scripts/brightness.sh"
"-1"
];
allow-when-locked = true;
};
"Mod+O" = {
action.toggle-overview = { };
repeat = false;
};
"Mod+Q" = {
action.close-window = { };
repeat = false;
};
"Mod+Left".action.focus-column-left = { };
"Mod+Down".action.focus-window-down = { };
"Mod+Up".action.focus-window-up = { };
"Mod+Right".action.focus-column-right = { };
"Mod+H".action.focus-column-left = { };
"Mod+J".action.focus-window-down = { };
"Mod+K".action.focus-window-up = { };
"Mod+L".action.focus-column-right = { };
"Mod+Ctrl+Left".action.move-column-left = { };
"Mod+Ctrl+Down".action.move-window-down = { };
"Mod+Ctrl+Up".action.move-window-up = { };
"Mod+Ctrl+Right".action.move-column-right = { };
"Mod+Ctrl+H".action.move-column-left = { };
"Mod+Ctrl+J".action.move-window-down = { };
"Mod+Ctrl+K".action.move-window-up = { };
"Mod+Ctrl+L".action.move-column-right = { };
"Mod+Home".action.focus-column-first = { };
"Mod+End".action.focus-column-last = { };
"Mod+Ctrl+Home".action.move-column-to-first = { };
"Mod+Ctrl+End".action.move-column-to-last = { };
"Mod+Shift+Left".action.focus-monitor-left = { };
"Mod+Shift+Down".action.focus-monitor-down = { };
"Mod+Shift+Up".action.focus-monitor-up = { };
"Mod+Shift+Right".action.focus-monitor-right = { };
"Mod+Shift+H".action.focus-monitor-left = { };
"Mod+Shift+J".action.focus-monitor-down = { };
"Mod+Shift+K".action.focus-monitor-up = { };
"Mod+Shift+L".action.focus-monitor-right = { };
"Mod+Shift+Ctrl+Left".action.move-column-to-monitor-left = { };
"Mod+Shift+Ctrl+Down".action.move-column-to-monitor-down = { };
"Mod+Shift+Ctrl+Up".action.move-column-to-monitor-up = { };
"Mod+Shift+Ctrl+Right".action.move-column-to-monitor-right = { };
"Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = { };
"Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = { };
"Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = { };
"Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = { };
"Mod+Page_Down".action.focus-workspace-down = { };
"Mod+Page_Up".action.focus-workspace-up = { };
"Mod+U".action.focus-workspace-down = { };
"Mod+I".action.focus-workspace-up = { };
"Mod+Ctrl+Page_Down".action.move-column-to-workspace-down = { };
"Mod+Ctrl+Page_Up".action.move-column-to-workspace-up = { };
"Mod+Ctrl+U".action.move-column-to-workspace-down = { };
"Mod+Ctrl+I".action.move-column-to-workspace-up = { };
"Mod+Shift+Page_Down".action.move-workspace-down = { };
"Mod+Shift+Page_Up".action.move-workspace-up = { };
"Mod+Shift+U".action.move-workspace-down = { };
"Mod+Shift+I".action.move-workspace-up = { };
"Mod+WheelScrollDown" = {
action.focus-workspace-down = { };
cooldown-ms = 150;
};
"Mod+WheelScrollUp" = {
action.focus-workspace-up = { };
cooldown-ms = 150;
};
"Mod+Ctrl+WheelScrollDown" = {
action.move-column-to-workspace-down = { };
cooldown-ms = 150;
};
"Mod+Ctrl+WheelScrollUp" = {
action.move-column-to-workspace-up = { };
cooldown-ms = 150;
};
"Mod+WheelScrollRight".action.focus-column-right = { };
"Mod+WheelScrollLeft".action.focus-column-left = { };
"Mod+Ctrl+WheelScrollRight".action.move-column-right = { };
"Mod+Ctrl+WheelScrollLeft".action.move-column-left = { };
"Mod+Shift+WheelScrollDown".action.focus-column-right = { };
"Mod+Shift+WheelScrollUp".action.focus-column-left = { };
"Mod+Ctrl+Shift+WheelScrollDown".action.move-column-right = { };
"Mod+Ctrl+Shift+WheelScrollUp".action.move-column-left = { };
"Mod+1".action.focus-workspace = 1;
"Mod+2".action.focus-workspace = 2;
"Mod+3".action.focus-workspace = 3;
"Mod+4".action.focus-workspace = 4;
"Mod+5".action.focus-workspace = 5;
"Mod+6".action.focus-workspace = 6;
"Mod+7".action.focus-workspace = 7;
"Mod+8".action.focus-workspace = 8;
"Mod+9".action.focus-workspace = 9;
"Mod+Ctrl+1".action.move-column-to-workspace = 1;
"Mod+Ctrl+2".action.move-column-to-workspace = 2;
"Mod+Ctrl+3".action.move-column-to-workspace = 3;
"Mod+Ctrl+4".action.move-column-to-workspace = 4;
"Mod+Ctrl+5".action.move-column-to-workspace = 5;
"Mod+Ctrl+6".action.move-column-to-workspace = 6;
"Mod+Ctrl+7".action.move-column-to-workspace = 7;
"Mod+Ctrl+8".action.move-column-to-workspace = 8;
"Mod+Ctrl+9".action.move-column-to-workspace = 9;
"Mod+BracketLeft".action.consume-or-expel-window-left = { };
"Mod+BracketRight".action.consume-or-expel-window-right = { };
"Mod+Comma".action.consume-window-into-column = { };
"Mod+Period".action.expel-window-from-column = { };
"Mod+R".action.switch-preset-column-width = { };
"Mod+Shift+R".action.switch-preset-window-height = { };
"Mod+Ctrl+R".action.reset-window-height = { };
"Mod+F".action.maximize-column = { };
"Mod+Shift+F".action.fullscreen-window = { };
"Mod+Ctrl+F".action.expand-column-to-available-width = { };
"Mod+C".action.center-column = { };
"Mod+Ctrl+C".action.center-visible-columns = { };
"Mod+Minus".action.set-column-width = "-10%";
"Mod+Equal".action.set-column-width = "+10%";
"Mod+Shift+Minus".action.set-window-height = "-10%";
"Mod+Shift+Equal".action.set-window-height = "+10%";
"Mod+V".action.toggle-window-floating = { };
"Mod+Shift+V".action.switch-focus-between-floating-and-tiling = { };
"Mod+W".action.toggle-column-tabbed-display = { };
"Print".action.screenshot = { };
"Ctrl+Print".action.screenshot-screen = { };
"Alt+Print".action.screenshot-window = { };
"Mod+Escape" = {
action.toggle-keyboard-shortcuts-inhibit = { };
allow-inhibiting = false;
};
"Mod+Shift+E".action.quit = { };
"Ctrl+Alt+Delete".action.quit = { };
"Mod+Shift+P".action.power-off-monitors = { };
};
};
}

376
home/tiling/niri/niri.nix Normal file
View file

@ -0,0 +1,376 @@
{ config, pkgs, ... }:
{
# https://github.com/sodiboo/niri-flake/blob/main/docs.md
programs.niri.settings = {
screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png";
hotkey-overlay.skip-at-startup = true;
prefer-no-csd = true;
gestures.hot-corners.enable = false;
spawn-at-startup = [
{
command = [
"${pkgs.swaybg}"
"-i"
"/home/${config.userOptions.username}/.local/share/dailywallpaper.jpg"
];
}
];
overview = {
backdrop-color = pkgs.catppuccin.${config.catppuccin.flavor}.crust;
workspace-shadow.enable = false;
};
input = {
focus-follows-mouse = {
enable = true;
max-scroll-amount = "0%";
};
keyboard = {
numlock = false;
repeat-delay = 600;
repeat-rate = 25;
};
mouse = {
enable = true;
accel-profile = "adaptive";
natural-scroll = true;
};
touchpad = {
enable = true;
accel-profile = "adaptive";
natural-scroll = true;
tap = false;
drag = false;
};
};
environment = {
QT_QPA_PLATFORM = "wayland";
DISPLAY = null;
};
outputs = {
"eDP-1" = {
scale = 1.75;
};
"HDMI-A-1" = {
scale = 2;
};
};
cursor = {
hide-when-typing = true;
hide-after-inactive-ms = 2000;
size = config.gtk.cursorTheme.size;
theme = config.gtk.cursorTheme.name;
};
layout = {
gaps = 4;
background-color = pkgs.catppuccin.${config.catppuccin.flavor}.mantle;
default-column-width = {
proportion = 0.5;
};
preset-column-widths = [
{ proportion = 1.0 / 3.0; }
{ proportion = 1.0 / 2.0; }
{ proportion = 2.0 / 3.0; }
];
border = {
enable = true;
width = 1;
active.color = pkgs.catppuccin.${config.catppuccin.flavor}.${config.catppuccin.accent};
inactive.color = pkgs.catppuccin.${config.catppuccin.flavor}.surface0;
urgent.color = pkgs.catppuccin.${config.catppuccin.flavor}.maroon;
};
focus-ring = {
enable = false;
width = 1;
active.color = pkgs.catppuccin.${config.catppuccin.flavor}.${config.catppuccin.accent};
inactive.color = pkgs.catppuccin.${config.catppuccin.flavor}.surface0;
urgent.color = pkgs.catppuccin.${config.catppuccin.flavor}.maroon;
};
shadow = {
enable = true;
spread = 5;
offset.x = 0;
offset.y = 5;
softness = 30;
color = pkgs.catppuccin.${config.catppuccin.flavor}.base + "77";
};
};
window-rules = [
{
matches = [
{
app-id = "firefox$";
title = "^Picture-in-Picture$";
}
];
open-floating = true;
default-floating-position = {
x = 32;
y = 32;
relative-to = "bottom-left";
};
}
{
geometry-corner-radius = {
top-left = 16.0;
top-right = 16.0;
bottom-left = 16.0;
bottom-right = 16.0;
};
clip-to-geometry = true;
}
{
matches = [
{
app-id = "openmw";
title = "OpenMW";
}
];
open-maximized = true;
focus-ring.enable = false;
border.enable = false;
shadow.enable = false;
}
];
binds = {
"Mod+Shift+Slash".action.show-hotkey-overlay = { };
"Mod+T" = {
action.spawn = [ "kitty" ];
hotkey-overlay.title = "Open a Terminal: kitty";
};
"Mod+Space" = {
action.spawn-sh = [
"noctalia-shell ipc call launcher toggle"
];
hotkey-overlay.title = "Run an Application: Noctalia app launcher";
};
"XF86AudioRaiseVolume" = {
action.spawn-sh = [
"noctalia-shell ipc call volume increase"
];
allow-when-locked = true;
};
"XF86AudioLowerVolume" = {
action.spawn-sh = [
"noctalia-shell ipc call volume decrease"
];
allow-when-locked = true;
};
"Shift+XF86AudioRaiseVolume" = {
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.01+"
];
allow-when-locked = true;
};
"Shift+XF86AudioLowerVolume" = {
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.01-"
];
allow-when-locked = true;
};
"XF86AudioMute" = {
action.spawn-sh = [
"noctalia-shell ipc call volume muteOutput"
];
allow-when-locked = true;
};
"XF86AudioMicMute" = {
action.spawn-sh = [
"noctalia-shell ipc call volume muteInput"
];
allow-when-locked = true;
};
"XF86MonBrightnessUp" = {
action.spawn = [
"/home/${config.userOptions.username}/.config/niri/scripts/brightness.sh"
"5"
];
allow-when-locked = true;
};
"XF86MonBrightnessDown" = {
action.spawn = [
"/home/${config.userOptions.username}/.config/niri/scripts/brightness.sh"
"-5"
];
allow-when-locked = true;
};
"Shift+XF86MonBrightnessUp" = {
action.spawn = [
"/home/${config.userOptions.username}/.config/niri/scripts/brightness.sh"
"1"
];
allow-when-locked = true;
};
"Shift+XF86MonBrightnessDown" = {
action.spawn = [
"/home/${config.userOptions.username}/.config/niri/scripts/brightness.sh"
"-1"
];
allow-when-locked = true;
};
"Mod+O" = {
action.toggle-overview = { };
repeat = false;
};
"Mod+Q" = {
action.close-window = { };
repeat = false;
};
"Mod+Left".action.focus-column-left = { };
"Mod+Down".action.focus-window-down = { };
"Mod+Up".action.focus-window-up = { };
"Mod+Right".action.focus-column-right = { };
"Mod+H".action.focus-column-left = { };
"Mod+J".action.focus-window-down = { };
"Mod+K".action.focus-window-up = { };
"Mod+L".action.focus-column-right = { };
"Mod+Ctrl+Left".action.move-column-left = { };
"Mod+Ctrl+Down".action.move-window-down = { };
"Mod+Ctrl+Up".action.move-window-up = { };
"Mod+Ctrl+Right".action.move-column-right = { };
"Mod+Ctrl+H".action.move-column-left = { };
"Mod+Ctrl+J".action.move-window-down = { };
"Mod+Ctrl+K".action.move-window-up = { };
"Mod+Ctrl+L".action.move-column-right = { };
"Mod+Home".action.focus-column-first = { };
"Mod+End".action.focus-column-last = { };
"Mod+Ctrl+Home".action.move-column-to-first = { };
"Mod+Ctrl+End".action.move-column-to-last = { };
"Mod+Shift+Left".action.focus-monitor-left = { };
"Mod+Shift+Down".action.focus-monitor-down = { };
"Mod+Shift+Up".action.focus-monitor-up = { };
"Mod+Shift+Right".action.focus-monitor-right = { };
"Mod+Shift+H".action.focus-monitor-left = { };
"Mod+Shift+J".action.focus-monitor-down = { };
"Mod+Shift+K".action.focus-monitor-up = { };
"Mod+Shift+L".action.focus-monitor-right = { };
"Mod+Shift+Ctrl+Left".action.move-column-to-monitor-left = { };
"Mod+Shift+Ctrl+Down".action.move-column-to-monitor-down = { };
"Mod+Shift+Ctrl+Up".action.move-column-to-monitor-up = { };
"Mod+Shift+Ctrl+Right".action.move-column-to-monitor-right = { };
"Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = { };
"Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = { };
"Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = { };
"Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = { };
"Mod+Page_Down".action.focus-workspace-down = { };
"Mod+Page_Up".action.focus-workspace-up = { };
"Mod+U".action.focus-workspace-down = { };
"Mod+I".action.focus-workspace-up = { };
"Mod+Ctrl+Page_Down".action.move-column-to-workspace-down = { };
"Mod+Ctrl+Page_Up".action.move-column-to-workspace-up = { };
"Mod+Ctrl+U".action.move-column-to-workspace-down = { };
"Mod+Ctrl+I".action.move-column-to-workspace-up = { };
"Mod+Shift+Page_Down".action.move-workspace-down = { };
"Mod+Shift+Page_Up".action.move-workspace-up = { };
"Mod+Shift+U".action.move-workspace-down = { };
"Mod+Shift+I".action.move-workspace-up = { };
"Mod+WheelScrollDown" = {
action.focus-workspace-down = { };
cooldown-ms = 150;
};
"Mod+WheelScrollUp" = {
action.focus-workspace-up = { };
cooldown-ms = 150;
};
"Mod+Ctrl+WheelScrollDown" = {
action.move-column-to-workspace-down = { };
cooldown-ms = 150;
};
"Mod+Ctrl+WheelScrollUp" = {
action.move-column-to-workspace-up = { };
cooldown-ms = 150;
};
"Mod+WheelScrollRight".action.focus-column-right = { };
"Mod+WheelScrollLeft".action.focus-column-left = { };
"Mod+Ctrl+WheelScrollRight".action.move-column-right = { };
"Mod+Ctrl+WheelScrollLeft".action.move-column-left = { };
"Mod+Shift+WheelScrollDown".action.focus-column-right = { };
"Mod+Shift+WheelScrollUp".action.focus-column-left = { };
"Mod+Ctrl+Shift+WheelScrollDown".action.move-column-right = { };
"Mod+Ctrl+Shift+WheelScrollUp".action.move-column-left = { };
"Mod+1".action.focus-workspace = 1;
"Mod+2".action.focus-workspace = 2;
"Mod+3".action.focus-workspace = 3;
"Mod+4".action.focus-workspace = 4;
"Mod+5".action.focus-workspace = 5;
"Mod+6".action.focus-workspace = 6;
"Mod+7".action.focus-workspace = 7;
"Mod+8".action.focus-workspace = 8;
"Mod+9".action.focus-workspace = 9;
"Mod+Ctrl+1".action.move-column-to-workspace = 1;
"Mod+Ctrl+2".action.move-column-to-workspace = 2;
"Mod+Ctrl+3".action.move-column-to-workspace = 3;
"Mod+Ctrl+4".action.move-column-to-workspace = 4;
"Mod+Ctrl+5".action.move-column-to-workspace = 5;
"Mod+Ctrl+6".action.move-column-to-workspace = 6;
"Mod+Ctrl+7".action.move-column-to-workspace = 7;
"Mod+Ctrl+8".action.move-column-to-workspace = 8;
"Mod+Ctrl+9".action.move-column-to-workspace = 9;
"Mod+BracketLeft".action.consume-or-expel-window-left = { };
"Mod+BracketRight".action.consume-or-expel-window-right = { };
"Mod+Comma".action.consume-window-into-column = { };
"Mod+Period".action.expel-window-from-column = { };
"Mod+R".action.switch-preset-column-width = { };
"Mod+Shift+R".action.switch-preset-window-height = { };
"Mod+Ctrl+R".action.reset-window-height = { };
"Mod+F".action.maximize-column = { };
"Mod+Shift+F".action.fullscreen-window = { };
"Mod+Ctrl+F".action.expand-column-to-available-width = { };
"Mod+C".action.center-column = { };
"Mod+Ctrl+C".action.center-visible-columns = { };
"Mod+Minus".action.set-column-width = "-10%";
"Mod+Equal".action.set-column-width = "+10%";
"Mod+Shift+Minus".action.set-window-height = "-10%";
"Mod+Shift+Equal".action.set-window-height = "+10%";
"Mod+V".action.toggle-window-floating = { };
"Mod+Shift+V".action.switch-focus-between-floating-and-tiling = { };
"Mod+W".action.toggle-column-tabbed-display = { };
"Print".action.screenshot = { };
"Ctrl+Print".action.screenshot-screen = { };
"Alt+Print".action.screenshot-window = { };
"Mod+Escape" = {
action.toggle-keyboard-shortcuts-inhibit = { };
allow-inhibiting = false;
};
"Mod+Shift+E".action.quit = { };
"Ctrl+Alt+Delete".action.quit = { };
"Mod+Shift+P".action.power-off-monitors = { };
};
};
}

View file

@ -0,0 +1,537 @@
{
pkgs,
config,
lib,
...
}:
let
# Get the actual color palettes
darkPalette = pkgs.catppuccin.${config.catppuccin.flavor};
lightPalette = pkgs.catppuccin.latte;
# Create theme from palette
mkTheme = palette: accent: {
mPrimary = palette.${accent};
mOnPrimary = palette.crust;
mSecondary = palette.subtext0;
mOnSecondary = palette.crust;
mTertiary = palette.teal;
mOnTertiary = palette.crust;
mError = palette.red;
mOnError = palette.crust;
mSurface = palette.base;
mOnSurface = palette.text;
mSurfaceVariant = palette.surface0;
mOnSurfaceVariant = palette.lavender;
mOutline = palette.surface2;
mShadow = palette.crust;
mHover = palette.teal;
mOnHover = palette.crust;
};
# Build the complete color scheme
customScheme = {
dark = mkTheme darkPalette config.catppuccin.accent;
light = mkTheme lightPalette config.catppuccin.accent;
};
# Convert to JSON
schemeJson = builtins.toJSON customScheme;
# Write to file - escape for shell
schemeJsonEscaped = lib.escapeShellArg schemeJson;
customPackage = pkgs.noctalia-shell.overrideAttrs (oldAttrs: {
pname = "noctalia-shell-custom";
nativeBuildInputs = (oldAttrs.nativeBuildInputs or [ ]) ++ [ pkgs.jq ];
postPatch = (oldAttrs.postPatch or "") + ''
echo "Patching noctalia-shell with Cat-Custom theme..."
echo " Dark: ${config.catppuccin.flavor} / Light: latte"
echo " Accent: ${config.catppuccin.accent}"
if [ -d Assets/ColorScheme/Catppuccin ]; then
mkdir -p Assets/ColorScheme/Cat-Custom
# Write the JSON directly
cat > Assets/ColorScheme/Cat-Custom/Cat-Custom.json << 'COLORSCHEME_EOF'
${schemeJson}
COLORSCHEME_EOF
echo "Created Cat-Custom color scheme:"
${pkgs.jq}/bin/jq -C '.' Assets/ColorScheme/Cat-Custom/Cat-Custom.json || true
# Add translation entries
for lang in en fr de es pt zh-CN; do
if [ -f "Assets/Translations/$lang.json" ]; then
${pkgs.jq}/bin/jq \
'.["color-scheme"].predefined.schemes["Cat-Custom"] = "Cat-Custom"' \
"Assets/Translations/$lang.json" > "Assets/Translations/$lang.json.tmp" \
&& mv "Assets/Translations/$lang.json.tmp" "Assets/Translations/$lang.json"
fi
done
else
echo "ERROR: ColorScheme directory not found"
exit 1
fi
'';
meta = oldAttrs.meta // {
description = "${oldAttrs.meta.description} (Cat-Custom: ${config.catppuccin.flavor}/${config.catppuccin.accent})";
};
});
in
{
programs.noctalia-shell = {
enable = true;
package = customPackage;
settings = {
settingsVersion = 0;
bar = {
position = "top";
backgroundOpacity = 1;
monitors = [ ];
density = "comfortable";
showCapsule = true;
capsuleOpacity = 1;
floating = false;
marginVertical = 0.25;
marginHorizontal = 0.25;
outerCorners = true;
exclusive = true;
widgets = {
left = [
{
icon = "rocket";
id = "CustomButton";
leftClickExec = "noctalia-shell ipc call launcher toggle";
}
{
id = "Workspace";
}
{
diskPath = "/";
id = "SystemMonitor";
showCpuTemp = false;
showCpuUsage = true;
showDiskUsage = true;
showGpuTemp = false;
showMemoryAsPercent = true;
showMemoryUsage = true;
showNetworkStats = false;
usePrimaryColor = false;
}
{
colorizeIcons = false;
hideMode = "hidden";
id = "ActiveWindow";
maxWidth = 375;
scrollingMode = "always";
showIcon = true;
useFixedWidth = false;
}
];
center = [
];
right = [
{
hideMode = "hidden";
hideWhenIdle = false;
id = "MediaMini";
maxWidth = 275;
scrollingMode = "always";
showAlbumArt = false;
showArtistFirst = true;
showProgressRing = true;
showVisualizer = true;
useFixedWidth = false;
visualizerType = "linear";
}
{
id = "Tray";
}
{
id = "NotificationHistory";
}
{
id = "Battery";
}
{
id = "Volume";
}
{
id = "Brightness";
}
{
id = "ControlCenter";
}
{
formatHorizontal = "ddd MMM dd yyyy @ h:mm AP";
formatVertical = "HH mm - dd MM";
id = "Clock";
useCustomFont = false;
usePrimaryColor = false;
}
];
};
};
general = {
avatarImage = "/home/${config.userOptions.username}/.face";
dimmerOpacity = 0.6;
showScreenCorners = true;
forceBlackScreenCorners = true;
scaleRatio = 1;
radiusRatio = 1;
iRadiusRatio = 1;
boxRadiusRatio = 1;
screenRadiusRatio = 1;
animationSpeed = 1;
animationDisabled = false;
compactLockScreen = false;
lockOnSuspend = true;
showSessionButtonsOnLockScreen = true;
showHibernateOnLockScreen = false;
enableShadows = false;
shadowDirection = "bottom_right";
shadowOffsetX = 2;
shadowOffsetY = 3;
language = "";
allowPanelsOnScreenWithoutBar = true;
};
ui = {
fontDefault = config.userOptions.fontSans.name;
fontFixed = config.userOptions.fontMono.name;
fontDefaultScale = 1;
fontFixedScale = 1;
tooltipsEnabled = true;
panelBackgroundOpacity = 1;
panelsAttachedToBar = true;
settingsPanelMode = "attached";
};
location = {
name = "Atlanta, US";
weatherEnabled = true;
weatherShowEffects = true;
useFahrenheit = true;
use12hourFormat = true;
showWeekNumberInCalendar = true;
showCalendarEvents = true;
showCalendarWeather = true;
analogClockInCalendar = false;
firstDayOfWeek = -1;
};
calendar = {
cards = [
{
enabled = true;
id = "calendar-header-card";
}
{
enabled = true;
id = "calendar-month-card";
}
{
enabled = true;
id = "weather-card";
}
{
enabled = true;
id = "timer-card";
}
];
};
screenRecorder = {
directory = "";
frameRate = 60;
audioCodec = "opus";
videoCodec = "h264";
quality = "very_high";
colorRange = "limited";
showCursor = true;
audioSource = "default_output";
videoSource = "portal";
};
wallpaper = {
enabled = false;
overviewEnabled = false;
directory = "";
monitorDirectories = [ ];
enableMultiMonitorDirectories = false;
recursiveSearch = false;
setWallpaperOnAllMonitors = true;
fillMode = "crop";
fillColor = "#000000";
randomEnabled = false;
randomIntervalSec = 300;
transitionDuration = 1500;
transitionType = "random";
transitionEdgeSmoothness = 0.05;
panelPosition = "follow_bar";
hideWallpaperFilenames = false;
useWallhaven = false;
wallhavenQuery = "";
wallhavenSorting = "relevance";
wallhavenOrder = "desc";
wallhavenCategories = "111";
wallhavenPurity = "100";
wallhavenResolutionMode = "atleast";
wallhavenResolutionWidth = "";
wallhavenResolutionHeight = "";
};
appLauncher = {
enableClipboardHistory = true;
enableClipPreview = true;
position = "center";
pinnedExecs = [ ];
useApp2Unit = false;
sortByMostUsed = true;
terminalCommand = "xterm -e";
customLaunchPrefixEnabled = false;
customLaunchPrefix = "";
viewMode = "list";
showCategories = true;
};
controlCenter = {
position = "close_to_bar_button";
shortcuts = {
left = [
{
id = "WiFi";
}
{
id = "Bluetooth";
}
{
id = "ScreenRecorder";
}
{
id = "WallpaperSelector";
}
];
right = [
{
id = "Notifications";
}
{
id = "PowerProfile";
}
{
id = "KeepAwake";
}
{
id = "NightLight";
}
];
};
cards = [
{
enabled = true;
id = "profile-card";
}
{
enabled = true;
id = "shortcuts-card";
}
{
enabled = true;
id = "audio-card";
}
{
enabled = true;
id = "media-sysmon-card";
}
];
};
systemMonitor = {
cpuWarningThreshold = 80;
cpuCriticalThreshold = 90;
tempWarningThreshold = 80;
tempCriticalThreshold = 90;
memWarningThreshold = 80;
memCriticalThreshold = 90;
diskWarningThreshold = 80;
diskCriticalThreshold = 90;
cpuPollingInterval = 3000;
tempPollingInterval = 3000;
memPollingInterval = 3000;
diskPollingInterval = 3000;
networkPollingInterval = 3000;
useCustomColors = false;
warningColor = "";
criticalColor = "";
};
dock = {
enabled = false;
displayMode = "auto_hide";
backgroundOpacity = 1;
floatingRatio = 1;
size = 1;
onlySameOutput = true;
monitors = [ ];
pinnedApps = [ ];
colorizeIcons = false;
pinnedStatic = false;
inactiveIndicators = false;
deadOpacity = 0.6;
};
network = {
wifiEnabled = true;
};
sessionMenu = {
enableCountdown = true;
countdownDuration = 5000;
position = "center";
showHeader = true;
powerOptions = [
{
action = "lock";
enabled = true;
}
{
action = "suspend";
enabled = true;
}
{
action = "hibernate";
enabled = true;
}
{
action = "reboot";
enabled = true;
}
{
action = "logout";
enabled = true;
}
{
action = "shutdown";
enabled = true;
}
];
};
notifications = {
enabled = true;
monitors = [ ];
location = "top_right";
overlayLayer = true;
backgroundOpacity = 1;
respectExpireTimeout = false;
lowUrgencyDuration = 3;
normalUrgencyDuration = 8;
criticalUrgencyDuration = 15;
enableKeyboardLayoutToast = true;
sounds = {
enabled = false;
volume = 0.5;
separateSounds = false;
criticalSoundFile = "";
normalSoundFile = "";
lowSoundFile = "";
excludedApps = "";
};
};
osd = {
enabled = true;
location = "top_right";
autoHideMs = 2000;
overlayLayer = true;
backgroundOpacity = 1;
enabledTypes = [
0
1
2
];
monitors = [ ];
};
audio = {
volumeStep = 5;
volumeOverdrive = false;
cavaFrameRate = 30;
visualizerType = "linear";
visualizerQuality = "high";
mprisBlacklist = [ ];
preferredPlayer = "";
externalMixer = "pwvucontrol || pavucontrol";
};
brightness = {
brightnessStep = 5;
enforceMinimum = true;
enableDdcSupport = true;
};
colorSchemes = {
useWallpaperColors = false;
predefinedScheme = "Cat-Custom";
darkMode = true;
schedulingMode = "off";
manualSunrise = "06:30";
manualSunset = "18:30";
matugenSchemeType = "scheme-fruit-salad";
generateTemplatesForPredefined = true;
};
templates = {
gtk = false;
qt = false;
kcolorscheme = false;
alacritty = false;
kitty = false;
ghostty = false;
foot = false;
wezterm = false;
fuzzel = false;
discord = false;
pywalfox = false;
vicinae = false;
walker = false;
code = false;
spicetify = false;
telegram = false;
cava = false;
yazi = false;
emacs = false;
niri = false;
enableUserTemplates = false;
};
nightLight = {
enabled = true;
forced = true;
autoSchedule = true;
nightTemp = "4000";
dayTemp = "6500";
manualSunrise = "06:30";
manualSunset = "18:30";
};
hooks = {
enabled = false;
wallpaperChange = "";
darkModeChange = "";
};
};
};
systemd.user.services.noctalia-shell = {
Unit = {
After = [ "niri.service" ];
PartOf = [ "niri.service" ];
Description = "Noctalia Shell - Wayland desktop shell";
Documentation = "https://docs.noctalia.dev/docs";
};
Service = {
ExecStart = "${customPackage}/bin/noctalia-shell";
Restart = "on-failure";
Environment = [
"LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale"
"TZDIR=${pkgs.tzdata}/share/zoneinfo"
"NOCTALIA_SETTINGS_FALLBACK=%h/.config/noctalia/gui-settings.json"
"QT_QPA_PLATFORM=wayland"
"QT_QPA_PLATFORMTHEME_5=qt5ct"
"QT_QPA_PLATFORMTHEME=qt6ct"
];
};
Install = {
WantedBy = [ "niri.service" ];
};
};
}

View file

@ -1,32 +0,0 @@
[Appearance]
color_scheme_path=/home/sckova/.config/qt5ct/style-colors.conf
custom_palette=true
icon_theme=Colloid-Dark
standard_dialogs=default
style=Breeze
[Fonts]
fixed="Noto Sans,12,-1,5,50,0,0,0,0,0"
general="Noto Sans,12,-1,5,50,0,0,0,0,0"
[Interface]
activate_item_on_single_click=1
buttonbox_layout=0
cursor_flash_time=1000
dialog_buttons_have_icons=1
double_click_interval=400
gui_effects=@Invalid()
keyboard_scheme=2
menus_have_icons=true
show_shortcuts_in_context_menus=true
stylesheets=@Invalid()
toolbutton_style=4
underline_shortcut=1
wheel_scroll_lines=3
[SettingsWindow]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3V\0\0\x4W\0\0\0\0\0\0\0\0\0\0\x3V\0\0\x4W\0\0\0\0\0\0\0\0\x6\xc0\0\0\0\0\0\0\0\0\0\0\x3V\0\0\x4W)
[Troubleshooting]
force_raster_widgets=1
ignored_applications=@Invalid()

View file

@ -1,4 +0,0 @@
[ColorScheme]
active_colors=#ffcdd6f4, #ff313244, #ff3d3d5e, #ff2f2f48, #ff0c0c12, #ff151520, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff09090d, #fffab387, #ff11111b, #fffab387, #ffcba6f7, #ff181825, #ffffffff, #ff1e1e2e, #ffcdd6f4, #806c7086
disabled_colors=#ff6c7086, #ff313244, #ff45475a, #ff313244, #ff11111b, #ff181825, #ff6c7086, #ffcdd6f4, #ff6c7086, #ff1e1e2e, #ff181825, #ff11111b, #ff181825, #ff6c7086, #ffa9bcdb, #ffc7cceb, #ff181825, #ffffffff, #ff1e1e2e, #ffcdd6f4, #806c7086
inactive_colors=#ffcdd6f4, #ff313244, #ff3d3d5e, #ff2f2f48, #ff0c0c12, #ff151520, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff09090d, #fffab387, #ff11111b, #fffab387, #ffcba6f7, #ff181825, #ffffffff, #ff1e1e2e, #ffcdd6f4, #806c7086

View file

@ -1,32 +0,0 @@
[Appearance]
color_scheme_path=/home/sckova/.config/qt6ct/style-colors.conf
custom_palette=true
icon_theme=Colloid-Dark
standard_dialogs=default
style=Breeze
[Fonts]
fixed="Noto Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
general="Noto Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
[Interface]
activate_item_on_single_click=1
buttonbox_layout=0
cursor_flash_time=1000
dialog_buttons_have_icons=1
double_click_interval=400
gui_effects=@Invalid()
keyboard_scheme=2
menus_have_icons=true
show_shortcuts_in_context_menus=true
stylesheets=@Invalid()
toolbutton_style=4
underline_shortcut=1
wheel_scroll_lines=3
[SettingsWindow]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3V\0\0\x4W\0\0\0\0\0\0\0\0\0\0\x3V\0\0\x4W\0\0\0\0\0\0\0\0\x6\xc0\0\0\0\0\0\0\0\0\0\0\x3V\0\0\x4W)
[Troubleshooting]
force_raster_widgets=1
ignored_applications=@Invalid()

View file

@ -1,4 +0,0 @@
[ColorScheme]
active_colors=#ffcdd6f4, #ff313244, #ff3d3d5e, #ff2f2f48, #ff0c0c12, #ff151520, #ffcdd6f4, #ffffffff, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff09090d, #fffab387, #ff11111b, #fffab387, #ffcba6f7, #ff181825, #ff000000, #ff1e1e2e, #ffcdd6f4, #ffa6adc8, #fffab387
disabled_colors=#ffbebebe, #ffefefef, #ffffffff, #ffcacaca, #ffbebebe, #ffb8b8b8, #ffbebebe, #ffffffff, #ffbebebe, #ffefefef, #ffefefef, #ffb1b1b1, #ff919191, #ffffffff, #ff0000ff, #ffff00ff, #fff7f7f7, #ff000000, #ffffffdc, #ff000000, #80000000, #ff919191
inactive_colors=#ffcdd6f4, #ff313244, #ff3d3d5e, #ff2f2f48, #ff0c0c12, #ff151520, #ffcdd6f4, #ffffffff, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff09090d, #fffab387, #ff11111b, #fffab387, #ffcba6f7, #ff181825, #ff000000, #ff1e1e2e, #ffcdd6f4, #ffa6adc8, #fffab387