Complete system rework feat. Niri, Noctalia, Helix, Vicinae, Zellij, & Kanshi

This commit is contained in:
2026-02-12 13:13:45 -05:00
parent 35fd66ce80
commit 569e131ac6
78 changed files with 1442 additions and 1294 deletions

12
modules/home/assets.nix Normal file
View File

@@ -0,0 +1,12 @@
{
config,
...
}:
{
home.file.".face".source = ../../assets/profile-picture.jpg;
home.file."${config.xdg.userDirs.extraConfig.XDG_WALLPAPERS_DIR}" = {
source = ../../assets/wallpapers;
recursive = true;
};
}

View File

@@ -3,28 +3,24 @@
}:
{
imports = [
./assets.nix
./firefox.nix
./foot.nix
# ./ghostty.nix
./git.nix
# ./helix.nix
./hypr
./mango.nix
./helix.nix
./kanshi.nix
./niri.nix
./noctalia.nix
./nvf.nix
./packages.nix
# ./plasma.nix
./screenshot.nix
./ssh.nix
./stylix.nix
./swaync.nix
./vscode.nix
./walker.nix
./wallpaper.nix
./waybar
./wlogout.nix
./terminal.nix
./vesktop.nix
./vicinae.nix
./xdg.nix
./yazi.nix
./zed.nix
./zsh.nix
./zen-browser.nix
];
}

View File

@@ -4,11 +4,20 @@
...
}:
{
# This gets around having to run `pywalfox install` manually, which just creates this manifest
home.file.".mozilla/native-messaging-hosts/pywalfox.json".text = builtins.toJSON {
name = "pywalfox";
description = "Automatically theme your browser using the colors generated by Pywal";
path = "${pkgs.pywalfox-native}/bin/pywalfox";
type = "stdio";
allowed_extensions = [ "pywalfox@frewacom.org" ];
};
programs.firefox = {
enable = true;
languagePacks = [ "en-US" ];
nativeMessagingHosts = with pkgs; [
kdePackages.plasma-browser-integration
pywalfox-native
];
policies = {
DefaultDownloadDirectory = config.xdg.userDirs.download;
@@ -70,7 +79,7 @@
packages = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin
bitwarden
plasma-integration
pywalfox
];
settings = {
"uBlock0@raymondhill.net".settings = {
@@ -108,16 +117,6 @@
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ];
};
chat-gpt = {
name = "ChatGPT";
urls = [
{
template = "https://chatgpt.com?q={searchTerms}&temporary-chat=true";
}
];
iconMapObj."64" = "https://chatgpt.com/favicon.ico";
definedAliases = [ "@gpt" ];
};
surugaya = {
name = "Surugaya";
urls = [
@@ -125,8 +124,7 @@
template = "https://www.suruga-ya.jp/search?search_word={searchTerms}";
}
];
iconMapObj."32" =
"https://www.suruga-ya.jp/drupal/themes/surugaya_mobile/images/pwa/images/icons/favicon-32x32.png";
iconMapObj."16" = "https://www.suruga-ya.jp/drupal/themes/surugaya/favicon.ico";
definedAliases = [ "@suru" ];
};
};

View File

@@ -1,17 +0,0 @@
{
...
}:
{
programs.foot = {
enable = true;
server.enable = false;
settings = {
main = {
term = "xterm-256color";
};
mouse = {
hide-when-typing = "yes";
};
};
};
}

View File

@@ -1,13 +0,0 @@
{
...
}:
{
programs.ghostty = {
enable = true;
enableZshIntegration = true;
settings = {
term = "xterm-256color";
};
systemd.enable = true;
};
}

View File

@@ -2,17 +2,38 @@
pkgs,
...
}:
let
yazi-picker = pkgs.writeShellApplication {
name = "yazi-picker";
text = ''
paths=$(yazi --chooser-file=/dev/stdout)
if [[ -n "$paths" ]]; then
zellij action toggle-floating-panes
zellij action write 27 # send <Escape> key
zellij action write-chars ":$1 $paths"
zellij action write 13 # send <Enter> key
else
zellij action toggle-floating-panes
fi
'';
};
in
{
home.packages = [ yazi-picker ];
programs.helix = {
enable = true;
defaultEditor = true;
extraPackages = with pkgs; [
basedpyright
ruff
# pylyzer
isort
black
nixd
nixfmt
rust-analyzer
rustfmt
];
languages = {
language = [
@@ -21,7 +42,6 @@
language-servers = [
"basedpyright"
"ruff"
# "pylyzer"
];
auto-format = true;
formatter = {
@@ -40,6 +60,18 @@
command = "nixfmt";
};
}
{
name = "rust";
language-servers = [ "rust-analyzer" ];
auto-format = true;
roots = [
"Cargo.toml"
"Cargo.lock"
];
formatter = {
command = "rustfmt";
};
}
];
language-server = {
basedpyright.config.python.analysis = {
@@ -49,17 +81,29 @@
command = "ruff";
args = [ "server" ];
};
# pylyzer = {
# command = "pylyzer";
# args = [ "--server" ];
# };
nixd = {
command = "nixd";
};
rust-analyzer = {
command = "rust-analyzer";
config = {
inlayHints = {
bindingModeHints.enable = false;
closingBraceHints.minLines = 10;
closureReturnTypeHints.enable = "with_block";
discriminantHints.enable = "fieldless";
lifetimeElisionHints.enable = "skip_trivial";
typeHints.hideClosureInitialization = false;
};
};
};
};
};
settings = {
editor = {
bufferline = "always";
completion-timeout = 5;
completion-trigger-len = 1;
line-number = "relative";
cursorline = true;
color-modes = true;
@@ -68,8 +112,22 @@
normal = "block";
select = "underline";
};
lsp = {
display-inlay-hints = true;
};
indent-guides = {
render = true;
skip-levels = 1;
};
soft-wrap = {
enable = true;
max-indent-retain = 80;
};
};
keys = {
normal = {
"C-y" =
":sh zellij run -n Yazi -c -f -x 10%% -y 10%% --width 80%% --height 80%% -- yazi-picker open %{buffer_name}";
};
};
theme = "catppuccin_mocha";

View File

@@ -1,13 +0,0 @@
{
...
}:
{
imports = [
./hypridle.nix
./hyprland.nix
./hyprlock.nix
./keybinds.nix
./monitors.nix
./pyprland.nix
];
}

View File

@@ -1,30 +0,0 @@
{
...
}:
{
services.hypridle = {
enable = true;
settings = {
general = {
lock_cmd = "pidof hyprlock || hyprlock --grace 10";
before_sleep_cmd = "loginctl lock-session";
fail_timeout = 1000;
};
listener = [
{
timeout = 300;
on-timeout = "loginctl lock-session";
}
{
timeout = 450;
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
{
timeout = 600;
on-timeout = "systemctl suspend || loginctl suspend";
}
];
};
};
}

View File

@@ -1,111 +0,0 @@
{
# inputs,
pkgs,
config,
...
}:
{
home.packages = with pkgs; [
hyprpolkitagent
hyprpicker
];
# xdg.configFile."uwsm/env".source =
# "${config.home.sessionVariablesPackage}/etc/profile.d/hm-session-vars.sh";
wayland.windowManager.hyprland = {
enable = true;
# systemd.enable = false;
package = null;
portalPackage = null;
settings = {
source = [
"${config.xdg.configHome}/hypr/monitors.conf"
];
animations = {
# Stolen from https://github.com/Vobledoble/nixparency-dots/
enabled = true;
bezier = [
"easeOutQuint,0.23,1,0.32,1"
"easeInOutCubic,0.65,0.05,0.36,1"
"linear,0,0,1,1"
"almostLinear,0.5,0.5,0.75,1.0"
"quick,0.15,0,0.1,1"
];
animation = [
"global, 1, 10, default"
"border, 1, 5.39, easeOutQuint"
"windows, 1, 4.79, easeOutQuint"
"windowsIn, 1, 4.1, easeOutQuint, popin 87%"
"windowsOut, 1, 1.49, linear, popin 87%"
"fadeIn, 1, 1.73, almostLinear"
"fadeOut, 1, 1.46, almostLinear"
"fade, 1, 3.03, quick"
"layers, 1, 3.81, easeOutQuint"
"layersIn, 1, 4, easeOutQuint, fade"
"layersOut, 1, 1.5, linear, fade"
"fadeLayersIn, 1, 1.79, almostLinear"
"fadeLayersOut, 1, 1.39, almostLinear"
"workspaces, 1, 1.94, almostLinear, fade"
"workspacesIn, 1, 1.21, almostLinear, fade"
"workspacesOut, 1, 1.94, almostLinear, fade"
];
};
general = {
gaps_in = 5;
gaps_out = 10;
border_size = 2;
"col.active_border" = "rgb(4479A4)";
"col.inactive_border" = "rgba(4479A480)";
};
decoration = {
rounding = 10;
active_opacity = 0.95;
inactive_opacity = 0.85;
fullscreen_opacity = 1.0;
blur = {
enabled = true;
size = 8;
passes = 3;
new_optimizations = true;
popups = true;
};
shadow.enabled = false;
};
misc = {
vfr = true;
};
layerrule = [
"blur, waybar" # Add blur to waybar
"blurpopups, waybar" # Blur waybar popups too!
"ignorealpha 0.2, waybar" # Make it so transparent parts are ignored
];
exec-once = [
"systemctl --user enable --now hypridle.service"
"systemctl --user enable --now hyprpolkitagent.service"
"systemctl --user enable app-com.mitchellh.ghostty.service"
"wpaperd -d"
"swaync"
"pypr"
];
env = [
"NIXOS_OZONE_WL, 1"
"HYPRSHOT_DIR, ${config.xdg.userDirs.extraConfig.XDG_SCREENSHOTS_DIR}"
"XDG_CURRENT_DESKTOP, Hyprland"
"XDG_SESSION_TYPE, wayland"
"XDG_SESSION_DESKTOP, Hyprland"
];
};
};
}

View File

@@ -1,108 +0,0 @@
{
config,
wallpaper,
...
}:
{
programs.hyprlock = {
enable = true;
settings = with config.lib.stylix.colors; {
general = {
hide_cursor = true;
};
background = [
{
path = "${config.xdg.userDirs.extraConfig.XDG_WALLPAPERS_DIR}/${wallpaper}";
blur_size = 4;
blur_passes = 3;
}
];
input-field = [
rec {
size = "250, 50";
outline_thickness = 3;
dots_size = 0.25;
dots_spacing = 0.4;
outer_color = "rgba(${base0F}55)";
capslock_color = outer_color;
numlock_color = outer_color;
bothlock_color = outer_color;
inner_color = "rgba(${base0F}11)";
font_color = "rgba(${base0F}ff)";
fade_on_empty = true;
placeholder_text = "<i>Password...</i>";
position = "0, -60";
halign = "center";
valign = "center";
}
];
label = [
# Hours
{
text = "cmd[update:1000] echo \"<b><big> $(date +\"%H\") </big></b>\"";
color = "rgb(${base0F})";
font_size = 112;
font_family = "GeistMono Nerd Font";
position = "0, 350";
halign = "center";
valign = "center";
}
# Minutes
{
text = "cmd[update:1000] echo \"<b><big> $(date +\"%M\") </big></b>\"";
color = "rgb(${base0F})";
font_size = 112;
font_family = "GeistMono Nerd Font";
position = "0, 220";
halign = "center";
valign = "center";
}
# Day of the Week
{
text = "cmd[update:18000000] echo \"<b><big> \"$(date +'%A')\" </big></b>\"";
color = "rgb(${base0F})";
font_size = 22;
font_family = "JetBrainsMono Nerd Font";
position = "0, 115";
halign = "center";
valign = "center";
}
# Date
{
text = "cmd[update:18000000] echo \"<b> \"$(date +'%d %b')\" </b>\"";
color = "rgb(${base0F})";
font_size = 18;
font_family = "JetBrainsMono Nerd Font";
position = "0, 85";
halign = "center";
valign = "center";
}
# Temperature
{
text = "cmd[update:18000000] echo \"<b>Feels like<big> $(curl -s 'wttr.in?format=%t' | tr -d '+') </big></b>\"";
color = "rgb(${base0F})";
font_size = 18;
font_family = "GeistMono Nerd Font";
position = "0, 40";
halign = "center";
valign = "bottom";
}
# Caps Lock Warning
{
text = "cmd[update:250] check-capslock";
color = "rgb(${base0F})";
font_size = 13;
font_family = "JetBrainsMono Nerd Font";
position = "0, -120";
halign = "center";
valign = "center";
}
];
};
};
}

View File

@@ -1,85 +0,0 @@
{
...
}:
{
wayland.windowManager.hyprland.settings = {
exec = "hyprctl dispatch submap global";
submap = "global";
# MY STUFF
"$mod" = "SUPER";
bind = [
"$mod, Q, killactive"
"$mod, W, exec, foot"
"$mod, S, exec, walker"
"$mod, Escape, exec, wlogout"
# Window Movement
"$mod, left, movefocus, l"
"$mod, right, movefocus, r"
"$mod, up, movefocus, u"
"$mod, down, movefocus, d"
"$mod SHIFT, left, movewindow, l"
"$mod SHIFT, right, movewindow, r"
"$mod SHIFT, up, movewindow, u"
"$mod SHIFT, down, movewindow, d"
"$mod CTRL, left, workspace, r-1"
"$mod CTRL, right, workspace, r+1"
"$mod CTRL SHIFT, left, movetoworkspace, r-1"
"$mod CTRL SHIFT, right, movetoworkspace, r+1"
# Screenshoting
", PRINT, exec, hyprshot -m output --raw | satty --filename -"
"$mod, PRINT, exec, hyprshot -m window --raw | satty --filename -"
"SHIFT, PRINT, exec, hyprshot -m region --raw | satty --filename -"
# Media Control Keys
", XF86AudioPrev, exec, playerctl previous"
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioNext, exec, playerctl next"
", XF86AudioMute, exec, pamixer -t"
"ALT, XF86AudioMute, exec, pamixer --default-source -t"
# Notification Center
"$mod, n, exec, swaync-client -t -sw"
# Scratchpads
"$mod, TAB, exec, pypr toggle term"
]
++ (
# workspaces
# binds $mod + [shift +] {1..9} to [move to] workspace {1..9}
builtins.concatLists (
builtins.genList (
i:
let
ws = i + 1;
in
[
"$mod, code:1${toString i}, workspace, ${toString ws}"
"$mod SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}"
]
) 9
)
);
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
"$mod ALT, mouse:272, resizewindow"
];
bindel = [
# Volume Controls
", XF86AudioRaiseVolume, exec, pamixer -i 5"
", XF86AudioLowerVolume, exec, pamixer -d 5"
"ALT, XF86AudioRaiseVolume, exec, pamixer --default-source -i 5"
"ALT, XF86AudioLowerVolume, exec, pamixer --default-source -d 5"
# Brightness Controls
", XF86MonBrightnessUp, exec, brightnessctl set 5%+"
", XF86MonBrightnessDown, exec, brightnessctl set 5%-"
];
};
}

View File

@@ -1,19 +0,0 @@
{
inputs,
pkgs,
...
}:
{
imports = [
inputs.hyprdynamicmonitors.homeManagerModules.default
];
home.packages = [
inputs.hyprdynamicmonitors.packages.${pkgs.stdenv.hostPlatform.system}.default
];
home.hyprdynamicmonitors = {
enable = true;
installExamples = false;
};
}

View File

@@ -1,22 +0,0 @@
{
pkgs,
...
}:
{
home.packages = with pkgs; [
pyprland
];
xdg.configFile."hypr/pyprland.toml".text = ''
[pyprland]
plugins = ["scratchpads"]
[scratchpads.term]
command = "foot --app-id term_dropdown"
class = "term_dropdown"
animation = "fromTop"
margin = 150
max_size = "1920px 1080px"
multi = false
'';
}

39
modules/home/kanshi.nix Normal file
View File

@@ -0,0 +1,39 @@
{
...
}:
{
services.kanshi = {
enable = true;
settings = [
{
profile = {
name = "laptop";
outputs = [
{
criteria = "eDP-1";
status = "enable";
scale = 1.0;
}
];
};
}
{
profile = {
name = "docked";
outputs = [
{
criteria = "eDP-1";
status = "disable";
}
{
criteria = "LG Electronics LG TV SSCR2 *";
mode = "3840x2160@120Hz";
scale = 1.0;
status = "enable";
}
];
};
}
];
};
}

View File

@@ -1,37 +0,0 @@
{
inputs,
...
}:
{
imports = [
inputs.mango.hmModules.mango
];
wayland.windowManager.mango = {
enable = true;
settings = ''
bind=SUPER,Return,spawn,alacritty
bind=SUPER,s,spawn,rofi -show drun
bind=SUPER,q,killclient
bind=SUPER+SHIFT,r,reload_config
bind=SUPER,t,setlayout,tile
bind=SUPER,v,setlayout,vertical_grid
bind=SUPER,c,setlayout,spiral
bind=SUPER,x,setlayout,scroller
bind=SUPER,n,switch_layout
bind=SUPER,a,togglegaps
bind=SUPER,Up,focusdir,up
bind=SUPER,Down,focusdir,down
bind=SUPER,Left,focusdir,left
bind=SUPER,Right,focusdir,right
bind=SUPER+SHIFT,Up,exchange_client,up
bind=SUPER+SHIFT,Down,exchange_client,down
bind=SUPER+SHIFT,Left,exchange_client,left
bind=SUPER+SHIFT,Right,exchange_client,right
'';
};
}

427
modules/home/niri.nix Normal file
View File

@@ -0,0 +1,427 @@
{
pkgs,
lib,
config,
...
}:
let
# Executables
foot = lib.getExe' config.programs.foot.package "foot";
vicinae = lib.getExe' config.programs.vicinae.package "vicinae";
noctalia-shell = lib.getExe' config.programs.noctalia-shell.package "noctalia-shell";
playerctl = lib.getExe' pkgs.playerctl "playerctl";
wpctl = lib.getExe' pkgs.wireplumber "wpctl";
brightnessctl = lib.getExe' pkgs.brightnessctl "brightnessctl";
in
{
programs.niri = {
# Niri is enabled by niri.nixosModules.nir in desktop.nix
settings = {
input = {
keyboard = {
xkb = {
layout = "us";
options = "compose:ralt";
};
};
touchpad = {
enable = true;
click-method = "clickfinger";
drag = true;
drag-lock = true;
dwt = true;
natural-scroll = false;
scroll-method = "two-finger";
tap = true;
tap-button-map = "left-right-middle"; # Mouse button click to register when tapping with 1, 2, or 3 fingers
};
warp-mouse-to-focus = {
enable = true;
mode = "center-xy-always";
};
focus-follows-mouse = {
enable = true;
};
mod-key = "Super";
};
binds = {
# General
"Mod+Slash" = {
action.show-hotkey-overlay = { };
repeat = false;
hotkey-overlay.title = "Show hotkeys";
};
"Mod+Q" = {
action.close-window = { };
repeat = false;
hotkey-overlay.title = "Close window";
};
"Mod+W" = {
action.spawn = foot;
repeat = false;
hotkey-overlay.title = "Terminal";
};
"Mod+A" = {
action.spawn = [
vicinae
"toggle"
];
repeat = false;
hotkey-overlay.title = "Launcher";
};
"Mod+Escape" = {
action.spawn = [
noctalia-shell
"ipc"
"call"
"sessionMenu"
"toggle"
];
repeat = false;
hotkey-overlay.title = "Session menu";
};
"Mod+N" = {
action.spawn = [
noctalia-shell
"ipc"
"call"
"notifications"
"toggleHistory"
];
repeat = false;
hotkey-overlay.title = "Show notifications";
};
# Media keys
"XF86AudioPrev" = {
action.spawn = [
playerctl
"previous"
];
repeat = false;
hotkey-overlay.title = "Previous track";
};
"XF86AudioPlay" = {
action.spawn = [
playerctl
"play-pause"
];
repeat = false;
hotkey-overlay.title = "Play / pause track";
};
"XF86AudioNext" = {
action.spawn = [
playerctl
"next"
];
repeat = false;
hotkey-overlay.title = "Next track";
};
"XF86AudioRaiseVolume" = {
action.spawn = [
wpctl
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.05+"
];
repeat = true;
allow-when-locked = true;
hotkey-overlay.title = "Raise volume";
};
"XF86AudioLowerVolume" = {
action.spawn = [
wpctl
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.05-"
];
repeat = true;
allow-when-locked = true;
hotkey-overlay.title = "Lower volume";
};
"XF86AudioMute" = {
action.spawn = [
wpctl
"set-mute"
"@DEFAULT_AUDIO_SINK@"
"toggle"
];
repeat = false;
allow-when-locked = true;
hotkey-overlay.title = "Mute playback";
};
"Alt+XF86AudioRaiseVolume" = {
action.spawn = [
wpctl
"set-volume"
"@DEFAULT_AUDIO_SOURCE@"
"0.05+"
];
repeat = true;
allow-when-locked = true;
hotkey-overlay.title = "Raise microphone volume";
};
"Alt+XF86AudioLowerVolume" = {
action.spawn = [
wpctl
"set-volume"
"@DEFAULT_AUDIO_SOURCE@"
"0.05-"
];
repeat = true;
allow-when-locked = true;
hotkey-overlay.title = "Lower microphone volume";
};
"Alt+XF86AudioMute" = {
action.spawn = [
wpctl
"set-mute"
"@DEFAULT_AUDIO_SOURCE@"
"toggle"
];
repeat = false;
allow-when-locked = true;
hotkey-overlay.title = "Mute microphone";
};
# Brightness
"XF86MonBrightnessUp" = {
action.spawn = [
brightnessctl
"set"
"5%+"
];
repeat = true;
allow-when-locked = true;
hotkey-overlay.title = "Increase brightness";
};
"XF86MonBrightnessDown" = {
action.spawn = [
brightnessctl
"set"
"5%-"
];
repeat = true;
allow-when-locked = true;
hotkey-overlay.title = "Decrease brightness";
};
# Screen capture
"Print" = {
action.screenshot = {
show-pointer = false;
};
repeat = false;
hotkey-overlay.title = "Screenshot";
};
"Mod+Print" = {
action.screenshot-window = {
# show-pointer = false;
};
repeat = false;
hotkey-overlay.title = "Screenshot window";
};
"Shift+Print" = {
action.screenshot-screen = {
show-pointer = false;
};
repeat = false;
hotkey-overlay.title = "Screenshot screen";
};
# Display scaling
"Mod+Ctrl+Equal" = {
action.spawn = [
"output-scale"
"+0.1"
];
repeat = true;
hotkey-overlay.title = "Increase display scale";
};
"Mod+Ctrl+Minus" = {
action.spawn = [
"output-scale"
"-0.1"
];
repeat = true;
hotkey-overlay.title = "Decrease display scale";
};
"Mod+Ctrl+0" = {
action.spawn = [
"output-scale"
"1.0"
];
repeat = true;
hotkey-overlay.title = "Reset display scale";
};
# Window and column size
"Mod+F" = {
action.maximize-column = { };
repeat = false;
hotkey-overlay.title = "Maximize Column";
};
"Mod+Shift+F" = {
action.fullscreen-window = { };
repeat = false;
hotkey-overlay.title = "Fullscreen";
};
"Mod+Ctrl+F" = {
action.expand-column-to-available-width = { };
repeat = false;
hotkey-overlay.title = "Fill empty column space";
};
"Mod+Equal" = {
action.set-column-width = "+10%";
repeat = true;
hotkey-overlay.title = "Increase column width";
};
"Mod+Minus" = {
action.set-column-width = "-10%";
repeat = true;
hotkey-overlay.title = "Decrease column width";
};
"Mod+Shift+Equal" = {
action.set-window-height = "+10%";
repeat = true;
hotkey-overlay.title = "Increase window height";
};
"Mod+Shift+Minus" = {
action.set-window-height = "-10%";
repeat = true;
hotkey-overlay.title = "Decrease window height";
};
"Mod+Z" = {
action.switch-focus-between-floating-and-tiling = { };
repeat = false;
hotkey-overlay.title = "Toggle floating";
};
# Window and column movement
"Mod+Up" = {
action.focus-window-or-monitor-up = { };
repeat = false;
hotkey-overlay.title = "Focus window up";
};
"Mod+Down" = {
action.focus-window-or-monitor-down = { };
repeat = false;
hotkey-overlay.title = "Focus window down";
};
"Mod+Left" = {
action.focus-column-or-monitor-left = { };
repeat = false;
hotkey-overlay.title = "Focus window left";
};
"Mod+Right" = {
action.focus-column-or-monitor-right = { };
repeat = false;
hotkey-overlay.title = "Focus window right";
};
"Mod+BracketLeft" = {
action.consume-or-expel-window-left = { };
repeat = false;
hotkey-overlay.title = "Move window left";
};
"Mod+BracketRight" = {
action.consume-or-expel-window-right = { };
repeat = false;
hotkey-overlay.title = "Move window right";
};
"Mod+Shift+Up" = {
action.move-column-to-monitor-up = { };
repeat = false;
hotkey-overlay.title = "Move column up";
};
"Mod+Shift+Down" = {
action.move-column-to-monitor-down = { };
repeat = false;
hotkey-overlay.title = "Move column down";
};
"Mod+Shift+Left" = {
action.move-column-left-or-to-monitor-left = { };
repeat = false;
hotkey-overlay.title = "Move column left";
};
"Mod+Shift+Right" = {
action.move-column-right-or-to-monitor-right = { };
repeat = false;
hotkey-overlay.title = "Move column right";
};
# Workspaces
"Mod+Ctrl+Up" = {
action.focus-workspace-up = { };
repeat = false;
hotkey-overlay.title = "Focus workspace up";
};
"Mod+Ctrl+Down" = {
action.focus-workspace-down = { };
repeat = false;
hotkey-overlay.title = "Focus workspace down";
};
"Mod+Ctrl+Shift+Up" = {
action.move-column-to-workspace-up = { };
repeat = false;
hotkey-overlay.title = "Move column to workspace up";
};
"Mod+Ctrl+Shift+Down" = {
action.move-column-to-workspace-down = { };
repeat = false;
hotkey-overlay.title = "Move column to workspace down";
};
# Overview
"Mod+Tab" = {
action.toggle-overview = { };
repeat = false;
hotkey-overlay.title = "Toggle overview";
};
};
window-rules = [
{
geometry-corner-radius = {
bottom-left = 5.0;
bottom-right = 5.0;
top-left = 5.0;
top-right = 5.0;
};
clip-to-geometry = true;
}
];
layer-rules = [
{
# Use noctalia wallpaper as overview backdrop
matches = [ { namespace = "^noctalia-overview*"; } ];
place-within-backdrop = true;
}
];
prefer-no-csd = true;
screenshot-path = "${config.xdg.userDirs.extraConfig.XDG_SCREENSHOTS_DIR}/%Y%m%d-%H%M%S.png";
hotkey-overlay = {
skip-at-startup = true;
};
# If not using systemd for noctalia, use this
# spawn-at-startup = [
# { argv = [ "noctalia-shell" ]; }
# ];
cursor = {
size = 16;
theme = "catppuccin-mocha-dark-cursors";
hide-when-typing = true;
};
gestures = {
hot-corners.enable = false;
};
environment = {
"NIXOS_OZONE_WL" = "1";
};
debug = {
# Allows notification actions and window activation from Noctalia.
honor-xdg-activation-with-invalid-serial = { };
};
# Support for external 'inclues' sounds like it is in the works.
# Will just have to wait until then for noctalia color scheme integration.
};
};
}

127
modules/home/noctalia.nix Normal file
View File

@@ -0,0 +1,127 @@
{
inputs,
config,
...
}:
{
imports = [
inputs.noctalia.homeModules.default
];
programs.noctalia-shell = {
enable = true;
systemd.enable = true; # Replaces spawn-at-startup in niri
settings = {
general = {
avatarImage = "~/.face";
};
location.name = "Washington DC";
bar = {
widgets = {
right = [
{
id = "plugin:tailscale";
}
{
id = "Tray";
}
{
id = "NotificationHistory";
}
{
id = "Battery";
}
{
id = "Volume";
}
{
id = "Brightness";
}
{
id = "ControlCenter";
}
];
};
};
templates = {
activeTemplates = [
{
enabled = true;
id = "discord";
}
{
enabled = true;
id = "foot";
}
{
enabled = true;
id = "gtk";
}
{
enabled = true;
id = "helix";
}
{
enabled = true;
id = "niri";
}
{
enabled = true;
id = "pywalfox";
}
{
enabled = true;
id = "qt";
}
{
enabled = true;
id = "vicinae";
}
{
enabled = true;
id = "yazi";
}
{
enabled = true;
id = "zed";
}
];
enableUserTheming = true;
};
wallpaper = {
enabled = true;
overviewEnabled = true;
directory = "${config.xdg.userDirs.extraConfig.XDG_WALLPAPERS_DIR}";
};
colorSchemes.predefinedScheme = "Catppuccin";
};
plugins = {
sources = [
{
enabled = true;
name = "Noctalia Plugins";
url = "https://github.com/noctalia-dev/noctalia-plugins";
}
];
states = {
tailscale = {
enabled = true;
sourceUrl = "https://github.com/noctalia-dev/noctalia-plugins";
};
};
version = 1;
};
pluginSettings = {
tailscale = {
refreshInterval = 5000;
compactMode = true;
showIpAddress = false;
showPeerCount = false;
hideDisconnected = false;
terminalCommand = "foot";
pingCount = 5;
defaultPeerAction = "copy-ip";
};
};
};
}

View File

@@ -1,7 +1,7 @@
{
inputs,
pkgs,
host,
# host,
...
}:
{
@@ -13,11 +13,19 @@
enable = true;
settings = {
vim = {
viAlias = false;
viAlias = true;
vimAlias = true;
# lazy.plugins = {
# "kanagawa.nvim" = {
# package = pkgs.vimPlugins.kanagawa-nvim;
# setupModule = "kanagawa";
# after = "vim.cmd(\"colorscheme kanagawa\")";
# };
# };
options = {
wrap = false;
wrap = true;
};
clipboard = {
@@ -67,6 +75,12 @@
whichKey.enable = true;
};
theme = {
enable = true;
name = "catppuccin";
style = "mocha";
};
keymaps = [
{
key = "<A-e>";
@@ -124,12 +138,6 @@
}
];
theme = {
enable = true;
name = "catppuccin";
style = "mocha";
};
languages = {
enableTreesitter = true;
enableFormat = true;
@@ -140,7 +148,7 @@
dap.enable = true;
lsp = {
enable = true;
server = "clangd";
servers = [ "clangd" ];
};
treesitter.enable = true;
};
@@ -149,7 +157,7 @@
enable = true;
format = {
enable = true;
type = "prettier";
type = [ "prettier" ];
};
lsp.enable = true;
treesitter.enable = true;
@@ -170,6 +178,7 @@
};
format = {
enable = true;
type = [ "prettierd" ];
};
lsp = {
enable = true;
@@ -183,21 +192,19 @@
enable = true;
format = {
enable = true;
package = pkgs.nixfmt;
type = "nixfmt";
type = [ "nixfmt" ];
};
lsp = {
enable = true;
package = pkgs.nixd;
server = "nixd";
options = {
nixos = {
expr = "(builtins.getFlake (builtins.toString ./.)).nixosConfigurations.${host}.options";
};
home-manager = {
expr = "(builtins.getFlake (builtins.toString ./.)).nixosConfigurations.${host}.options.home-manager.users.type.getSubOptions []";
};
};
servers = [ "nixd" ];
# options = {
# nixos = {
# expr = "(builtins.getFlake (builtins.toString ./.)).nixosConfigurations.${host}.options";
# };
# home-manager = {
# expr = "(builtins.getFlake (builtins.toString ./.)).nixosConfigurations.${host}.options.home-manager.users.type.getSubOptions []";
# };
# };
};
treesitter.enable = true;
};
@@ -210,7 +217,10 @@
};
format = {
enable = true;
type = "black-and-isort";
type = [
"black"
"isort"
];
};
lsp = {
enable = true;
@@ -242,7 +252,7 @@
extraDiagnostics.enable = true;
format = {
enable = true;
type = "prettier";
type = [ "prettier" ];
};
lsp.enable = true;
treesitter.enable = true;

View File

@@ -1,21 +1,20 @@
{
inputs,
pkgs,
...
}:
{
imports = [
inputs.nix-jmu-cs345.homeManagerModules.bernstdh
];
programs.nix-jmu-cs345.enable = true;
home.packages = with pkgs; [
zoom-us
devenv
discord
sqlitebrowser
drawio
check-capslock
wl-clipboard-rs
# Libre Office
libreoffice-qt
hunspell
hunspellDicts.en_US
htop
obsidian
# CD Stuff
picard
@@ -23,9 +22,6 @@
rsgain
playerctl
pamixer
pavucontrol
brightnessctl
obsidian
];
}

View File

@@ -1,45 +0,0 @@
{
inputs,
...
}:
{
imports = [
inputs.plasma-manager.homeModules.plasma-manager
];
programs = {
plasma = {
enable = true;
kscreenlocker = {
appearance = {
wallpaper = ../../wallpapers/lanterns_of_twilight.png;
};
};
workspace = {
lookAndFeel = "org.kde.breezedark.desktop";
wallpaper = ../../wallpapers/lanterns_of_twilight.png;
wallpaperFillMode = "preserveAspectCrop";
};
};
konsole = {
enable = true;
defaultProfile = "Jade";
profiles = {
jade = {
name = "Jade";
font = {
name = "FiraCode Nerd Font";
};
extraConfig = {
Appearance = {
WordMode = true;
};
};
};
};
};
};
}

View File

@@ -5,13 +5,22 @@
}:
{
home.packages = with pkgs; [
hyprshot
satty
grim
slurp
wl-clipboard-rs
];
xdg.configFile."satty/config.toml".text = ''
[general]
fullscreen = false
output-filename = "${config.xdg.userDirs.extraConfig.XDG_SCREENSHOTS_DIR}/%Y-%m-%d_%H:%M:%S.png"
'';
programs.swappy = {
enable = true;
# Configuration options: https://github.com/jtheoof/swappy?tab=readme-ov-file#config
settings = {
Default = {
save_dir = config.xdg.userDirs.extraConfig.XDG_SCREENSHOTS_DIR;
save_filename_format = "%Y%m%d-%H%M%S.png";
show_panel = false;
auto_save = false;
early_exit = true;
};
};
};
}

View File

@@ -25,6 +25,11 @@
serverAliveCountMax = 5;
serverAliveInterval = 60;
};
"cluster" = {
hostname = "login02.cluster.cs.jmu.edu";
user = "tamassno";
proxyJump = "stu";
};
};
};
}

View File

@@ -1,5 +1,6 @@
{
inputs,
config,
pkgs,
...
}:
@@ -13,43 +14,77 @@
autoEnable = false;
polarity = "dark";
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
cursor = {
name = "Catppuccin-Mocha-Dark-Cursors";
package = pkgs.catppuccin-cursors.mochaDark;
size = 16;
};
fonts = {
monospace = {
name = "JetBrainsMono Nerd Font"; # "FiraCode Nerd Font";
package = pkgs.nerd-fonts.jetbrains-mono; # pkgs.nerd-fonts.fira-code;
name = "JetBrainsMono Nerd Font";
package = pkgs.nerd-fonts.jetbrains-mono;
};
};
icons = {
enable = true;
package = pkgs.morewaita-icon-theme;
light = "MoreWaita";
dark = "MoreWaita";
};
targets = {
ghostty.enable = true;
gtk.enable = true;
firefox = {
foot = {
enable = true;
profileNames = [ "eclypse" ];
colorTheme.enable = true;
firefoxGnomeTheme.enable = true;
fonts.enable = true;
colors.enable = false;
inputs.enable = false;
opacity.enable = false;
};
foot.enable = true;
lazygit.enable = true;
starship.enable = true;
swaync.enable = true;
yazi.enable = true;
};
};
home.pointerCursor = {
enable = true;
gtk.enable = true;
name = "Catppuccin-Mocha-Dark-Cursors";
package = pkgs.catppuccin-cursors.mochaDark;
size = 16;
};
gtk = {
enable = true;
colorScheme = "dark";
iconTheme = {
name = "Adwaita";
package = pkgs.adwaita-icon-theme;
iconTheme.name = "MoreWaita";
theme = {
name = "adw-gtk3-dark";
package = pkgs.adw-gtk3;
};
};
qt = {
enable = true;
platformTheme.name = "qtct";
style.name = "breeze";
qt5ctSettings = {
Appearance = {
color_scheme_path = "${config.xdg.configHome}/qt5ct/colors/noctalia.conf";
custom_palette = true;
icon_theme = "MoreWaita";
standard_dialogs = "xdgdesktopportal";
style = "Breeze";
};
Fonts = {
fixed = "\"JetBrainsMono Nerd Font Mono,12\"";
general = "\"JetBrainsMono Nerd Font Propo,12\"";
};
};
qt6ctSettings = {
Appearance = {
color_scheme_path = "${config.xdg.configHome}/qt6ct/colors/noctalia.conf";
custom_palette = true;
icon_theme = "MoreWaita";
standard_dialogs = "xdgdesktopportal";
style = "Breeze";
};
Fonts = {
fixed = "\"JetBrainsMono Nerd Font Mono,12\"";
general = "\"JetBrainsMono Nerd Font Propo,12\"";
};
};
};
home.sessionVariables = {
QS_ICON_THEME = "MoreWaita";
};
}

View File

@@ -1,104 +0,0 @@
{
...
}:
{
services.swaync = {
enable = true;
settings = {
positionX = "right";
positionY = "top";
cssPriority = "user"; # "application"
control-center-width = 380;
control-center-height = 860;
control-center-margin-top = 10;
control-center-margin-bottom = 10;
control-center-margin-right = 10;
control-center-margin-left = 10;
notification-window-width = 400;
notification-icon-size = 48;
notification-body-image-height = 100;
notification-body-image-width = 200;
timeout = 4;
timeout-low = 2;
timeout-critical = 6;
fit-to-screen = false;
keyboard-shortcuts = true;
image-visibility = "when-available";
transition-time = 200;
hide-on-clear = false;
hide-on-action = false;
script-fail-notify = true;
scripts = {
example-script = {
exec = "echo 'Do something...'";
urgency = "Normal";
};
};
notification-visibility = {
example-name = {
state = "muted";
urgency = "low";
app-name = "Spotify";
};
};
widgets = [
"label"
"buttons-grid"
"mpris"
"dnd"
"title"
"notifications"
];
widget-config = {
title = {
text = "Notifications";
clear-all-button = true;
button-text = " 󰎟 ";
};
dnd = {
text = "Do Not Disturb";
};
label = {
max-lines = 1;
text = " ";
};
mpris = {
image-size = 96;
image-radius = 12;
};
volume = {
label = "󰕾";
show-per-app = true;
};
buttons-grid = {
actions = [
{
label = "";
command = "pamixer -t";
}
{
label = "";
command = "pamixer --default-source -t";
}
{
label = "";
command = "nmtui";
}
# {
# label = "󰂯";
# command = "blueman-manager";
# }
# {
# label = "󰏘";
# command = "nwg-look";
# }
];
};
};
};
};
}

View File

@@ -1,4 +1,5 @@
{
config,
pkgs,
...
}:
@@ -11,6 +12,19 @@
fastfetch = {
enable = true;
};
foot = {
enable = true;
server.enable = false;
settings = {
main = {
term = "xterm-256color";
include = "${config.xdg.configHome}/foot/themes/noctalia";
};
mouse = {
hide-when-typing = "yes";
};
};
};
fzf = {
enable = true;
enableZshIntegration = true;
@@ -21,84 +35,62 @@
settings = {
add_newline = true;
format = pkgs.lib.concatStrings [
"[](fg:base02)"
"[ 󱄅 ](bg:base02 fg:base07)"
"[](bg:base07 fg:base02)"
"[( $username(@$hostname) )](bg:base07 fg:base02)"
"[](bg:red fg:base07)"
"[ $directory ](bg:red fg:base02)"
"[](bg:cyan fg:red)"
"[( $git_branch $git_status )](bg:cyan fg:base02)"
"[](fg:cyan bg:blue)"
"[(( $golang)( $nodejs)( $rust)( $python) )](bg:blue fg:base02)"
"[](fg:blue)"
"[ $username([@](bold 3)$hostname) $directory( $git_branch $git_status)](5)"
"$line_break"
"[](fg:base02)"
"$character"
"[ $character](5)"
];
username = {
style_root = "white";
format = "[$user](5)";
disabled = false;
show_always = true;
style_user = "none";
style_root = "none";
format = "[$user]($style)";
};
hostname = {
style = "none";
format = "[$hostname]($style)";
format = "[$hostname](bold 7)";
disabled = false;
ssh_only = false;
};
character = {
success_symbol = "[](bold fg:green)";
error_symbol = "[](bold fg:red)";
vimcmd_symbol = "[](bold fg:green)";
vimcmd_replace_one_symbol = "[](bold fg:lavender)";
vimcmd_replace_symbol = "[](bold fg:lavender)";
vimcmd_visual_symbol = "[](bold fg:yellow)";
success_symbol = "[](bold 5)";
error_symbol = "[](bold 5)";
vimcmd_symbol = "[](bold 5)";
};
directory = {
style = "none";
format = "[$path]($style)";
truncation_length = 3;
truncation_symbol = "/";
substitutions = {
"Documents" = "󰈙 ";
"Downloads" = " ";
"Music" = " ";
"Pictures" = " ";
};
read_only = "";
format = "[ $path](blue)";
read_only_style = "bold white";
truncation_length = 5;
};
git_branch = {
symbol = "";
style = "none";
style = "bright-black";
format = "[$symbol $branch]($style)";
};
git_status = {
style = "none";
format = "[$all_status$ahead_behind]($style)";
};
golang = {
symbol = "";
style = "none";
format = "[$symbol( $version)]($style)";
};
nodejs = {
symbol = "";
style = "none";
format = "[$symbol( $version)]($style)";
};
python = {
symbol = "";
style = "none";
format = "[$symbol( $version)( \\($virtualenv\\))]($style)";
};
rust = {
symbol = "";
style = "none";
format = "[$symbol( $version)]($style)";
format = "([$all_status$ahead_behind](1))";
conflicted = "󱐋";
ahead = "\${count}";
behind = "\${count}";
diverged = "\${ahead_count}\${behind_count}";
up_to_date = "";
untracked = "?\${count}";
stashed = "$${count}";
modified = "!\${count}";
staged = "+\${count}";
renamed = "»\${count}";
deleted = "\${count}";
};
scan_timeout = 100;
};
};
zellij = {
enable = true;
enableZshIntegration = true;
settings = {
theme = "catppuccin-mocha";
show_startup_tips = false;
};
};
zoxide = {
enable = true;
enableZshIntegration = true;
@@ -113,6 +105,7 @@
];
};
autosuggestion.enable = true;
dotDir = "${config.xdg.configHome}/zsh";
history = {
append = true;
findNoDups = true;
@@ -143,7 +136,6 @@
'';
syntaxHighlighting.enable = true;
shellAliases = {
stu = "ssh stu";
ff = "fastfetch";
};
};

18
modules/home/vesktop.nix Normal file
View File

@@ -0,0 +1,18 @@
{
...
}:
{
programs.vesktop = {
enable = true;
vencord = {
settings = {
oUpdate = false;
autoUpdateNotification = false;
notifyAboutUpdates = false;
useQuickCss = true;
disableMinSize = true;
enabledThemes = [ "noctalia.theme.css" ];
};
};
};
}

36
modules/home/vicinae.nix Normal file
View File

@@ -0,0 +1,36 @@
{
...
}:
{
# Not using Vicinae's flake because the server fucking seg faults immediately
programs.vicinae = {
enable = true;
systemd = {
enable = true;
autoStart = true;
};
# For configuration option documentation, see: https://github.com/vicinaehq/vicinae/blob/f6222f1e82fe2077ad42f10a6d6837dc61c67fd0/vicinae/assets/config.jsonc
settings = {
escape_key_behavior = "close_window";
close_on_focus_loss = true;
pop_to_root_on_close = true;
favicon_service = "twenty";
font = {
normal = {
size = 12;
normal = "JetBrainsMono Nerd Font";
};
};
theme = {
light = {
name = "noctalia";
icon_theme = "MoreWaita";
};
dark = {
name = "noctalia";
icon_theme = "MoreWaita";
};
};
};
};
}

View File

@@ -1,108 +0,0 @@
{
pkgs,
...
}:
{
programs.vscode = {
enable = true;
package = pkgs.vscode-fhs;
profiles = {
default = {
enableExtensionUpdateCheck = false;
enableUpdateCheck = false;
extensions = with pkgs.vscode-extensions; [
# General
pkief.material-icon-theme
ritwickdey.liveserver
aaron-bond.better-comments
yzane.markdown-pdf
mechatroner.rainbow-csv
catppuccin.catppuccin-vsc
# Remote development
ms-vscode-remote.remote-ssh
ms-vscode-remote.remote-ssh-edit
ms-vscode.remote-explorer
# Nix
bbenoist.nix
jnoortheen.nix-ide
# Python
ms-python.python
ms-python.vscode-pylance
ms-python.debugpy
ms-python.black-formatter
ms-python.isort
# Rust
rust-lang.rust-analyzer
# Typescript / WebDev
esbenp.prettier-vscode
yoavbls.pretty-ts-errors
svelte.svelte-vscode
];
userSettings = {
# General
"editor.formatOnSave" = true;
"workbench.iconTheme" = "material-icon-theme";
"workbench.colorTheme" = "Catppuccin Mocha";
"catppuccin.accentColor" = "flamingo";
# Remote SSH
# VSCode attempts to write to ~/.ssh/config for remote ssh connections.
# Because ~/.ssh/config is managed with home-manager, it is not writeable.
# So we specify a custom ssh config path
"remote.SSH.configFile" = "/home/eclypse/.ssh/vscode-config";
# Prettier
"editor.defaultFormatter" = "esbenp.prettier-vscode";
"prettier.bracketSpacing" = true;
"prettier.printWidth" = 100;
"prettier.semi" = false;
"prettier.singleQuote" = true;
"prettier.tabWidth" = 4;
# Python
"[python]" = {
"editor.defaultFormatter" = "ms-python.black-formatter";
"editor.codeActionsOnSave" = {
"source.organizeImports" = "explicit";
};
};
"isort.args" = [
"--profile"
"black"
];
"python.analysis.typeCheckingMode" = "strict";
"python.languageServer" = "Pylance";
# JSON
"[json]" = {
"prettier.tabWidth" = 2;
};
"[jsonc]" = {
"prettier.tabWidth" = 2;
};
# Svelte
"[svelte]" = {
"editor.defaultFormatter" = "svelte.svelte-vscode";
};
"svelte.enable-ts-plugin" = true;
# C / C++
"C_Cpp.clang_format_style" = "GNU"; # This is really just for cs361, I actually hate the GNU style
"C_Cpp.default.cStandard" = "gnu17";
"[c]" = {
"editor.defaultFormatter" = "ms-vscode.cpptools";
};
"[cpp]" = {
"editor.defaultFormatter" = "ms-vscode.cpptools";
};
};
};
};
};
}

View File

@@ -1,67 +0,0 @@
{
inputs,
...
}:
{
imports = [
inputs.walker.homeManagerModules.default
];
programs.walker = {
enable = true;
runAsService = true;
config = {
close_when_open = true;
click_to_close = true;
providers = {
default = [ "desktopapplications" ];
max_results = 50;
prefixes = [
{
prefix = ";";
provider = "providerlist";
}
{
prefix = ">";
provider = "runner";
}
{
prefix = "/";
provider = "files";
}
{
prefix = ".";
provider = "symbols";
}
{
prefix = "!";
provider = "todo";
}
{
prefix = "%";
provider = "bookmarks";
}
{
prefix = "=";
provider = "calc";
}
{
prefix = "@";
provider = "websearch";
}
{
prefix = ":";
provider = "clipboard";
}
{
prefix = "$";
provider = "windows";
}
];
clipboard = {
time_format = "%d.%m. - %H:%M"; # format for the clipboard item date
};
};
};
};
}

View File

@@ -1,26 +0,0 @@
{
config,
wallpaper,
...
}:
let
wallpapers = config.xdg.userDirs.extraConfig.XDG_WALLPAPERS_DIR;
in
{
home.file."${wallpapers}" = {
source = ../../wallpapers;
recursive = true;
};
services.wpaperd = {
enable = true;
settings = {
default = {
mode = "center";
};
any = {
path = "${wallpapers}/${wallpaper}";
};
};
};
}

View File

@@ -1,143 +0,0 @@
{
...
}:
{
programs.waybar = {
enable = true;
systemd.enable = true;
settings = [
{
layer = "top";
position = "top";
margin-left = 10;
margin-right = 10;
margin-top = 5;
fixed-center = true;
reload_style_on_change = false;
"hyprland/workspaces" = import ./modules/hyprland-workspaces.nix { };
"custom/menu" = import ./modules/menu.nix { };
"hyprland/window" = import ./modules/hyprland-window.nix { };
"disk" = import ./modules/disk.nix { };
"cpu" = import ./modules/cpu.nix { };
"memory" = import ./modules/memory.nix { };
"temperature" = import ./modules/temperature.nix { };
"idle_inhibitor" = import ./modules/idle-inhibitor.nix { };
"tray" = import ./modules/tray.nix { };
"network" = import ./modules/network.nix { };
"wireplumber" = import ./modules/wireplumber.nix { };
"backlight" = import ./modules/backlight.nix { };
"mpris" = import ./modules/mpris.nix { };
"battery" = import ./modules/battery.nix { full-at = 80; }; # Change this to come from the TLP setting
"clock" = import ./modules/clock.nix { };
"custom/power" = import ./modules/power.nix { };
"custom/hyprpicker" = import ./modules/hyprpicker.nix { };
"custom/separator#blank" = {
format = "";
interval = "once";
tooltip = false;
};
modules-left = [
"custom/menu"
"custom/separator#blank"
"clock"
"custom/separator#blank"
"custom/hyprpicker"
];
modules-center = [
"hyprland/workspaces"
];
modules-right = [
"tray"
"custom/separator#blank"
"group/motherboard"
"custom/separator#blank"
"wireplumber"
"custom/separator#blank"
"battery"
"custom/separator#blank"
"custom/power"
];
"group/motherboard" = {
orientation = "inherit";
modules = [
"cpu"
"memory"
"temperature"
"disk"
];
};
}
];
style = ''
@define-color base00 #192435; /* Darkest background (night sky / deep shadows) */
@define-color base01 #243449; /* Slightly lighter background */
@define-color base02 #36455D; /* Selection / inactive UI */
@define-color base03 #51637E; /* Comments / subtle foreground */
@define-color base04 #8FA3BA; /* Dark foreground (status bars) */
@define-color base05 #C7D2DF; /* Default foreground (text) */
@define-color base06 #E3EAF2; /* Light foreground (highlighted text) */
@define-color base07 #F4D9C7; /* Bright foreground (lantern light) */
@define-color base08 #D88C7A; /* Red / Errors (warm wood & lantern glow) */
@define-color base09 #E5AD97; /* Orange / Numbers / Constants */
@define-color base0A #E9C48A; /* Yellow / Classes / Warnings */
@define-color base0B #9FBFA8; /* Green / Strings */
@define-color base0C #8FB6C8; /* Cyan / Support / Regex */
@define-color base0D #7FA6D9; /* Blue / Functions / Keywords */
@define-color base0E #B69BCB; /* Purple / Types / Specials */
@define-color base0F #B0896A; /* Brown / Deprecated */
* {
all: unset;
font-family: "JetBrainsMono Nerd Font Propo"; /* The Propo(rtional) variant of the ensures icons are properly spaced */
font-feature-settings: '"zero", "tnum", "ss01", "ss02", "ss03", "cv01"';
font-weight: 700;
min-height: 0;
}
window#waybar {
background: transparent;
}
.module {
padding: 0 6px;
}
.modules-left,
.modules-center,
.modules-right {
background: @base00;
padding: 6px 8px;
border-color: @base03;
border-width: 1.5px;
border-style: solid;
border-radius: 0.75rem;
}
#workspaces button {
color: @base04;
font-size: 0.9rem;
padding: 0 7px;
}
#motherboard,
#custom-menu {
color: @base04;
}
#wireplumber,
#battery,
#custom-power,
#custom-hyprpicker,
#clock {
color: @base05;
}
'';
};
}

View File

@@ -1,27 +0,0 @@
{
...
}:
{
format = "{icon}";
tooltip-format = "Backlight {percent}%";
format-icons = [
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
];
icon-size = 10;
on-scroll-down = "brightnessctl set 10%-";
on-scroll-up = "brightnessctl set +10%";
}

View File

@@ -1,33 +0,0 @@
{
full-at ? 100,
...
}:
{
inherit full-at;
states = {
# These values are percentages based on `full-at`
good = 95;
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-charging = " {capacity}%";
format-plugged = "󱘖 {capacity}%";
format-full = "{icon} {capacity}%";
format-icons = [
"󰂎"
"󰁺"
"󰁻"
"󰁼"
"󰁽"
"󰁾"
"󰁿"
"󰂀"
"󰂁"
"󰂂"
"󰁹"
];
format-time = "{H}h {M}min";
tooltip = true;
tooltip-format = "{timeTo} {power}w";
}

View File

@@ -1,13 +0,0 @@
{
...
}:
{
format = "";
format-disabled = "󰂳";
format-connected = "󰂱 {num_connections}";
tooltip-format = " {device_alias}";
tooltip-format-connected = "{device_enumerate}";
tooltip-format-enumerate-connected = " {device_alias} 󰂄{device_battery_percentage}%";
tooltip = true;
# on-click = "blueman-manager";
}

View File

@@ -1,21 +0,0 @@
{
...
}:
{
interval = 1; # Poll every second
format = "{:%H:%M - %d/%b}";
tooltip-format = "<tt><small>{calendar}</small></tt>";
calendar = {
mode = "year";
mode-mon-col = 3;
weeks-pos = "right";
on-scroll = 1;
format = {
months = "<span color='#ffead3'><b>{}</b></span>";
days = "<span color='#ecc6d9'><b>{}</b></span>";
weeks = "<span color='#99ffdd'><b>W{}</b></span>";
weekdays = "<span color='#ffcc66'><b>{}</b></span>";
today = "<span color='#ff6699'><b><u>{}</u></b></span>";
};
};
}

View File

@@ -1,7 +0,0 @@
{
...
}:
{
format = "{usage}% 󰍛";
interval = 1;
}

View File

@@ -1,10 +0,0 @@
{
...
}:
{
interval = 30;
format = "{percentage_used}% 󰋊";
tooltip = true;
tooltip-format = "{specific_free:0.1f}/{specific_total:0.1f}GiB";
unit = "GiB";
}

View File

@@ -1,15 +0,0 @@
{
...
}:
{
format = "{title}";
max-length = 40;
separate-outputs = true; # List different titles for each monitor
offscreen-css = true; # No idea what this does
offscreen-css-text = "(inactive)"; # No idea what this does either
rewrite = {
"(.*) Mozilla Firefox" = " Firefox";
# Foot terminal doesn't display any title for some reason
# Find a fix
};
}

View File

@@ -1,23 +0,0 @@
{
...
}:
{
active-only = false; # Show all workspaces
all-outputs = true; # Show all workspace groups
format = "{icon}";
show-special = false; # Hide Hyprland's "special" workspaces
on-click = "activate";
on-scroll-up = "hyprctl dispatch workspace r+1";
on-scroll-down = "hyprctl dispatch workspace r-1";
persistent-workspaces = {
"1" = [ ];
"2" = [ ];
"3" = [ ];
"4" = [ ];
"5" = [ ];
};
format-icons = {
active = "";
default = "";
};
}

View File

@@ -1,7 +0,0 @@
{
...
}:
{
format = "󰏘";
on-click = "hyprpicker | tr -d '\\n' | wl-copy";
}

View File

@@ -1,10 +0,0 @@
{
...
}:
{
format = "{icon}";
format-icons = {
activated = " ";
deactivated = " ";
};
}

View File

@@ -1,11 +0,0 @@
{
...
}:
{
interval = 10;
format = "{used:0.1f}G 󰾆";
format-alt = "{percentage}% 󰾆";
format-alt-click = "click";
tooltip = true;
tooltip-format = "{used:0.1f}/{total:0.1f}GiB";
}

View File

@@ -1,10 +0,0 @@
{
...
}:
{
format = "{}";
exec = "echo ; echo 󱓟 app launcher";
interval = 86400;
tooltip = true;
on-click = "walker";
}

View File

@@ -1,26 +0,0 @@
{
...
}:
{
interval = 10;
format = "{player_icon} ";
format-paused = "{status_icon} <i>{dynamic}</i>";
player-icons = {
chromium = "";
mpd = "";
default = "";
firefox = "";
kdeconnect = "";
mopidy = "";
mpv = "󰐹";
spotify = "";
vlc = "󰕼";
};
status-icons = {
paused = "";
playing = "";
stopped = "";
};
max-length = 30;
}

View File

@@ -1,22 +0,0 @@
{
...
}:
{
format = "{ifname}";
format-wifi = "{icon}";
format-ethernet = "󰌘";
format-disconnected = "󰌙";
format-linked = "󰈁 {ifname} (No IP)";
tooltip-format = "{ipaddr} {bandwidthUpBytes} {bandwidthDownBytes}";
tooltip-format-wifi = "{essid} {icon} {signalStrength}%";
tooltip-format-ethernet = "{essid} 󰌘";
tooltip-format-disconnected = "󰌙 Disconnected";
max-length = 50;
format-icons = [
"󰤯"
"󰤟"
"󰤢"
"󰤥"
"󰤨"
];
}

View File

@@ -1,10 +0,0 @@
{
...
}:
{
format = "";
exec = "echo ; echo 󰟡 power";
on-click = "wlogout";
interval = 86400; # once every day
tooltip = true;
}

View File

@@ -1,14 +0,0 @@
{
...
}:
{
interval = 10;
tooltip = true;
# Thermal Zone 12 refers to the CPU package temp
# This might vary between devices. Maybe make it an input?
thermal-zone = 12;
critical-threshold = 85;
format-critical = "{temperatureC}°C {icon}";
format = "{temperatureC}°C {icon}";
format-icons = [ "󰈸" ];
}

View File

@@ -1,7 +0,0 @@
{
...
}:
{
icon-size = 15;
spacing = 8;
}

View File

@@ -1,27 +0,0 @@
{
...
}:
{
format = "{icon} {volume}% {format_source}";
format-muted = "󰖁 {format_source}";
format-source = "󰍬 {volume}%";
format-source-muted = "󰍭";
format-icons = {
headphone = "";
hands-free = "";
headset = "";
phone = "";
portable = "";
car = "";
default = [
""
""
"󰕾"
""
];
};
scroll-step = 5.0;
on-click = "pavucontrol -t 3";
on-click-right = "pavucontrol -t 4";
tooltip-format = "{node_name} {volume}%\n{source_desc} {source_volume}%";
}

View File

@@ -1,116 +0,0 @@
{
config,
pkgs,
wallpaper,
...
}:
{
programs.wlogout = {
enable = true;
layout = [
{
label = "lock";
action = "loginctl lock-session";
text = "Lock";
keybind = "l";
}
{
label = "hibernate";
action = "systemctl hibernate";
text = "Hibernate";
keybind = "h";
}
{
label = "logout";
action = "uwsm stop";
text = "Logout";
keybind = "e";
}
{
label = "shutdown";
action = "systemctl poweroff";
text = "Shutdown";
keybind = "s";
}
{
label = "suspend";
action = "systemctl suspend";
text = "Suspend";
keybind = "u";
}
{
label = "reboot";
action = "systemctl reboot";
text = "Reboot";
keybind = "r";
}
];
# * IMPORTANT
# * The for some reason the SVG icons will not be rendered when wlogout is called
# * from a hyprland keybind unless librsvg is installed.
# * See packages.nix (programs.gdk-pixbuf.modulePackages = [ pkgs.librsvg ];)
style = with config.lib.stylix.colors.withHashtag; ''
* {
font-family: "Rubik Light";
background-image: none;
box-shadow: none;
}
window {
background: url("${config.xdg.userDirs.extraConfig.XDG_WALLPAPERS_DIR}/${wallpaper}");
background-size: cover;
}
button {
margin: 10px;
border-radius: 20px;
border-color: ${base0F};
text-decoration-color: ${base0F};
color: ${base0F};
background-color: alpha(${base01}, 0.5);
border-style: solid;
border-width: 2px;
background-repeat: no-repeat;
background-position: center;
background-size: 25%;
}
button:focus, button:active, button:hover {
background-color: alpha(${base0F}, 0.3);
outline-style: none;
}
button:hover {
background-size: 27%;
}
button span {
font-size: 1.2em;
}
#lock {
background-image: url("${pkgs.wlogout}/share/wlogout/assets/lock.svg");
}
#logout {
background-image: url("${pkgs.wlogout}/share/wlogout/assets/logout.svg");
}
#suspend {
background-image: url("${pkgs.wlogout}/share/wlogout/assets/suspend.svg");
}
#hibernate {
background-image: url("${pkgs.wlogout}/share/wlogout/assets/hibernate.svg");
}
#shutdown {
background-image: url("${pkgs.wlogout}/share/wlogout/assets/shutdown.svg");
}
#reboot {
background-image: url("${pkgs.wlogout}/share/wlogout/assets/reboot.svg");
}
'';
};
}

View File

@@ -1,10 +1,19 @@
{
config,
pkgs,
...
}:
{
xdg = {
enable = true;
portal = {
enable = true;
configPackages = [ pkgs.gnome-session ];
extraPortals = with pkgs; [
xdg-desktop-portal-gnome
xdg-desktop-portal-gtk
];
};
userDirs = {
enable = true;
createDirectories = true;

View File

@@ -1,10 +1,63 @@
{
pkgs,
...
}:
{
home.packages = with pkgs; [
dragon-drop
];
programs.yazi = {
enable = true;
enableZshIntegration = true;
shellWrapperName = "y";
plugins = with pkgs.yaziPlugins; {
inherit git full-border chmod;
};
initLua = ''
require("git"):setup {
-- Order of status signs showing in the linemode
order = 1500,
}
require("full-border"):setup()
'';
keymap = {
mgr.prepend_keymap = [
{
on = "<C-d>";
run = "shell -- dragon-drop -x -i -T %s1";
desc = "Open a prompt to drag and drop a file";
}
{
on = [
"c"
"m"
];
run = "plugin chmod";
desc = "Chmod on selected files";
}
];
};
settings = {
plugin = {
# Disable all preset previewers, preloaders
# This is recommended by yazi when working with network shares
preloaders = [ ];
previewers = [ ];
prepend_fetchers = [
{
id = "git";
url = "*";
run = "git";
}
{
id = "git";
url = "*/";
run = "git";
}
];
};
};
};
}

View File

@@ -7,12 +7,11 @@
enable = true;
extensions = [
"nix"
"catppuccin"
];
extraPackages = [ pkgs.nixd ];
userSettings = {
theme = "Catppuccin Mocha";
theme = "Noctalia Dark";
features = {
edit_prediction_provider = "copilot";
};

View File

@@ -0,0 +1,13 @@
{
inputs,
...
}:
{
imports = [
inputs.zen-browser.homeModules.twilight
];
programs.zen-browser = {
enable = true;
};
}