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

BIN
assets/profile-picture.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

View File

Before

Width:  |  Height:  |  Size: 7.5 MiB

After

Width:  |  Height:  |  Size: 7.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

Before

Width:  |  Height:  |  Size: 826 KiB

After

Width:  |  Height:  |  Size: 826 KiB

View File

Before

Width:  |  Height:  |  Size: 6.0 MiB

After

Width:  |  Height:  |  Size: 6.0 MiB

1022
flake.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -31,37 +31,31 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
plasma-manager = {
url = "github:nix-community/plasma-manager";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
stylix = { stylix = {
url = "github:nix-community/stylix"; url = "github:nix-community/stylix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
mango.url = "github:DreamMaoMao/mango?rev=1271832e947d3d4af27b36f687edd2f2e535f051"; noctalia = {
url = "github:noctalia-dev/noctalia-shell";
hyprland.url = "github:hyprwm/Hyprland";
silentSDDM = {
url = "github:uiriansan/SilentSDDM";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
hyprdynamicmonitors.url = "github:fiffeek/hyprdynamicmonitors"; niri = {
url = "github:sodiboo/niri-flake";
elephant = {
url = "github:abenz1267/elephant";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
walker = { zen-browser = {
url = "github:abenz1267/walker"; url = "github:0xc000022070/zen-browser-flake";
inputs.elephant.follows = "elephant"; inputs = {
# IMPORTANT: To ensure compatibility with the latest Firefox version, use nixpkgs-unstable.
nixpkgs.follows = "nixpkgs";
home-manager.follows = "home-manager";
};
}; };
nix-jmu-cs345.url = "github:Eclypsed/nix-jmu-cs345";
}; };
outputs = outputs =
@@ -74,13 +68,7 @@
{ {
nixosConfigurations.vanta = nixpkgs.lib.nixosSystem { nixosConfigurations.vanta = nixpkgs.lib.nixosSystem {
system = "x86_64-linux"; system = "x86_64-linux";
specialArgs = { specialArgs = { inherit inputs; };
inherit inputs;
host = "vanta";
wallpaper = "twilight-village.png";
# Host public SSH key (e.g. /etc/ssh/ssh_host_ed25519_key.pub).
hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAaDVBJdMDFL8r9NQCbaLe+DPHGhGzRv2N7+7m1/U8DP";
};
modules = [ modules = [
./modules/system ./modules/system
./hosts/vanta ./hosts/vanta

21
hosts/hosts.nix Normal file
View File

@@ -0,0 +1,21 @@
{
lib,
...
}:
{
options.host = {
name = lib.mkOption {
type = lib.types.str;
description = "Logical host name";
};
# Host public SSH key (e.g. /etc/ssh/ssh_host_ed25519_key.pub).
# We only set the hostPubkey if one is supplied. For new hosts the pub key will not
# exist until it is generated after the first rebuild.
pubKey = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = "The public key of the host. Will be null until generated on first rebuild";
};
};
}

View File

@@ -7,5 +7,11 @@
inputs.nixos-hardware.nixosModules.framework-12th-gen-intel inputs.nixos-hardware.nixosModules.framework-12th-gen-intel
./hardware-configuration.nix ./hardware-configuration.nix
../../profiles/intel.nix ../../profiles/intel.nix
../hosts.nix
]; ];
host = {
name = "vanta";
pubKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAaDVBJdMDFL8r9NQCbaLe+DPHGhGzRv2N7+7m1/U8DP";
};
} }

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 = [ imports = [
./assets.nix
./firefox.nix ./firefox.nix
./foot.nix
# ./ghostty.nix
./git.nix ./git.nix
# ./helix.nix ./helix.nix
./hypr ./kanshi.nix
./mango.nix ./niri.nix
./noctalia.nix
./nvf.nix ./nvf.nix
./packages.nix ./packages.nix
# ./plasma.nix
./screenshot.nix ./screenshot.nix
./ssh.nix ./ssh.nix
./stylix.nix ./stylix.nix
./swaync.nix ./terminal.nix
./vscode.nix ./vesktop.nix
./walker.nix ./vicinae.nix
./wallpaper.nix
./waybar
./wlogout.nix
./xdg.nix ./xdg.nix
./yazi.nix ./yazi.nix
./zed.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 = { programs.firefox = {
enable = true; enable = true;
languagePacks = [ "en-US" ]; languagePacks = [ "en-US" ];
nativeMessagingHosts = with pkgs; [ nativeMessagingHosts = with pkgs; [
kdePackages.plasma-browser-integration pywalfox-native
]; ];
policies = { policies = {
DefaultDownloadDirectory = config.xdg.userDirs.download; DefaultDownloadDirectory = config.xdg.userDirs.download;
@@ -70,7 +79,7 @@
packages = with pkgs.nur.repos.rycee.firefox-addons; [ packages = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin ublock-origin
bitwarden bitwarden
plasma-integration pywalfox
]; ];
settings = { settings = {
"uBlock0@raymondhill.net".settings = { "uBlock0@raymondhill.net".settings = {
@@ -108,16 +117,6 @@
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ]; 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 = { surugaya = {
name = "Surugaya"; name = "Surugaya";
urls = [ urls = [
@@ -125,8 +124,7 @@
template = "https://www.suruga-ya.jp/search?search_word={searchTerms}"; template = "https://www.suruga-ya.jp/search?search_word={searchTerms}";
} }
]; ];
iconMapObj."32" = iconMapObj."16" = "https://www.suruga-ya.jp/drupal/themes/surugaya/favicon.ico";
"https://www.suruga-ya.jp/drupal/themes/surugaya_mobile/images/pwa/images/icons/favicon-32x32.png";
definedAliases = [ "@suru" ]; 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, 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 = { programs.helix = {
enable = true; enable = true;
defaultEditor = true;
extraPackages = with pkgs; [ extraPackages = with pkgs; [
basedpyright basedpyright
ruff ruff
# pylyzer
isort isort
black black
nixd nixd
nixfmt nixfmt
rust-analyzer
rustfmt
]; ];
languages = { languages = {
language = [ language = [
@@ -21,7 +42,6 @@
language-servers = [ language-servers = [
"basedpyright" "basedpyright"
"ruff" "ruff"
# "pylyzer"
]; ];
auto-format = true; auto-format = true;
formatter = { formatter = {
@@ -40,6 +60,18 @@
command = "nixfmt"; command = "nixfmt";
}; };
} }
{
name = "rust";
language-servers = [ "rust-analyzer" ];
auto-format = true;
roots = [
"Cargo.toml"
"Cargo.lock"
];
formatter = {
command = "rustfmt";
};
}
]; ];
language-server = { language-server = {
basedpyright.config.python.analysis = { basedpyright.config.python.analysis = {
@@ -49,17 +81,29 @@
command = "ruff"; command = "ruff";
args = [ "server" ]; args = [ "server" ];
}; };
# pylyzer = {
# command = "pylyzer";
# args = [ "--server" ];
# };
nixd = { nixd = {
command = "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 = { settings = {
editor = { editor = {
bufferline = "always";
completion-timeout = 5;
completion-trigger-len = 1;
line-number = "relative"; line-number = "relative";
cursorline = true; cursorline = true;
color-modes = true; color-modes = true;
@@ -68,8 +112,22 @@
normal = "block"; normal = "block";
select = "underline"; select = "underline";
}; };
lsp = {
display-inlay-hints = true;
};
indent-guides = { indent-guides = {
render = true; 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"; theme = "catppuccin_mocha";

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

View File

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

View File

@@ -5,13 +5,22 @@
}: }:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
hyprshot grim
satty slurp
wl-clipboard-rs
]; ];
xdg.configFile."satty/config.toml".text = '' programs.swappy = {
[general] enable = true;
fullscreen = false # Configuration options: https://github.com/jtheoof/swappy?tab=readme-ov-file#config
output-filename = "${config.xdg.userDirs.extraConfig.XDG_SCREENSHOTS_DIR}/%Y-%m-%d_%H:%M:%S.png" 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; serverAliveCountMax = 5;
serverAliveInterval = 60; serverAliveInterval = 60;
}; };
"cluster" = {
hostname = "login02.cluster.cs.jmu.edu";
user = "tamassno";
proxyJump = "stu";
};
}; };
}; };
} }

View File

@@ -1,5 +1,6 @@
{ {
inputs, inputs,
config,
pkgs, pkgs,
... ...
}: }:
@@ -13,43 +14,77 @@
autoEnable = false; autoEnable = false;
polarity = "dark"; polarity = "dark";
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml"; base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
cursor = {
name = "Catppuccin-Mocha-Dark-Cursors";
package = pkgs.catppuccin-cursors.mochaDark;
size = 16;
};
fonts = { fonts = {
monospace = { monospace = {
name = "JetBrainsMono Nerd Font"; # "FiraCode Nerd Font"; name = "JetBrainsMono Nerd Font";
package = pkgs.nerd-fonts.jetbrains-mono; # pkgs.nerd-fonts.fira-code; package = pkgs.nerd-fonts.jetbrains-mono;
}; };
}; };
icons = {
enable = true;
package = pkgs.morewaita-icon-theme;
light = "MoreWaita";
dark = "MoreWaita";
};
targets = { targets = {
ghostty.enable = true; foot = {
gtk.enable = true;
firefox = {
enable = true; enable = true;
profileNames = [ "eclypse" ]; fonts.enable = true;
colorTheme.enable = true; colors.enable = false;
firefoxGnomeTheme.enable = true; 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 = { gtk = {
enable = true; enable = true;
colorScheme = "dark"; colorScheme = "dark";
iconTheme = { iconTheme.name = "MoreWaita";
name = "Adwaita"; theme = {
package = pkgs.adwaita-icon-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,4 +1,5 @@
{ {
config,
pkgs, pkgs,
... ...
}: }:
@@ -11,6 +12,19 @@
fastfetch = { fastfetch = {
enable = true; 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 = { fzf = {
enable = true; enable = true;
enableZshIntegration = true; enableZshIntegration = true;
@@ -21,84 +35,62 @@
settings = { settings = {
add_newline = true; add_newline = true;
format = pkgs.lib.concatStrings [ format = pkgs.lib.concatStrings [
"[](fg:base02)" "[ $username([@](bold 3)$hostname) $directory( $git_branch $git_status)](5)"
"[ 󱄅 ](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)"
"$line_break" "$line_break"
"[](fg:base02)" "[ $character](5)"
"$character"
]; ];
username = { username = {
style_root = "white";
format = "[$user](5)";
disabled = false;
show_always = true; show_always = true;
style_user = "none";
style_root = "none";
format = "[$user]($style)";
}; };
hostname = { hostname = {
style = "none"; format = "[$hostname](bold 7)";
format = "[$hostname]($style)"; disabled = false;
ssh_only = false; ssh_only = false;
}; };
character = { character = {
success_symbol = "[](bold fg:green)"; success_symbol = "[](bold 5)";
error_symbol = "[](bold fg:red)"; error_symbol = "[](bold 5)";
vimcmd_symbol = "[](bold fg:green)"; vimcmd_symbol = "[](bold 5)";
vimcmd_replace_one_symbol = "[](bold fg:lavender)";
vimcmd_replace_symbol = "[](bold fg:lavender)";
vimcmd_visual_symbol = "[](bold fg:yellow)";
}; };
directory = { directory = {
style = "none"; read_only = "";
format = "[$path]($style)"; format = "[ $path](blue)";
truncation_length = 3; read_only_style = "bold white";
truncation_symbol = "/"; truncation_length = 5;
substitutions = {
"Documents" = "󰈙 ";
"Downloads" = " ";
"Music" = " ";
"Pictures" = " ";
};
}; };
git_branch = { git_branch = {
symbol = ""; symbol = "";
style = "none"; style = "bright-black";
format = "[$symbol $branch]($style)"; format = "[$symbol $branch]($style)";
}; };
git_status = { git_status = {
style = "none"; format = "([$all_status$ahead_behind](1))";
format = "[$all_status$ahead_behind]($style)"; conflicted = "󱐋";
}; ahead = "\${count}";
golang = { behind = "\${count}";
symbol = ""; diverged = "\${ahead_count}\${behind_count}";
style = "none"; up_to_date = "";
format = "[$symbol( $version)]($style)"; untracked = "?\${count}";
}; stashed = "$${count}";
nodejs = { modified = "!\${count}";
symbol = ""; staged = "+\${count}";
style = "none"; renamed = "»\${count}";
format = "[$symbol( $version)]($style)"; deleted = "\${count}";
};
python = {
symbol = "";
style = "none";
format = "[$symbol( $version)( \\($virtualenv\\))]($style)";
};
rust = {
symbol = "";
style = "none";
format = "[$symbol( $version)]($style)";
}; };
scan_timeout = 100; scan_timeout = 100;
}; };
}; };
zellij = {
enable = true;
enableZshIntegration = true;
settings = {
theme = "catppuccin-mocha";
show_startup_tips = false;
};
};
zoxide = { zoxide = {
enable = true; enable = true;
enableZshIntegration = true; enableZshIntegration = true;
@@ -113,6 +105,7 @@
]; ];
}; };
autosuggestion.enable = true; autosuggestion.enable = true;
dotDir = "${config.xdg.configHome}/zsh";
history = { history = {
append = true; append = true;
findNoDups = true; findNoDups = true;
@@ -143,7 +136,6 @@
''; '';
syntaxHighlighting.enable = true; syntaxHighlighting.enable = true;
shellAliases = { shellAliases = {
stu = "ssh stu";
ff = "fastfetch"; 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,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,10 +1,19 @@
{ {
config, config,
pkgs,
... ...
}: }:
{ {
xdg = { xdg = {
enable = true; enable = true;
portal = {
enable = true;
configPackages = [ pkgs.gnome-session ];
extraPortals = with pkgs; [
xdg-desktop-portal-gnome
xdg-desktop-portal-gtk
];
};
userDirs = { userDirs = {
enable = true; enable = true;
createDirectories = true; createDirectories = true;

View File

@@ -1,10 +1,63 @@
{ {
pkgs,
... ...
}: }:
{ {
home.packages = with pkgs; [
dragon-drop
];
programs.yazi = { programs.yazi = {
enable = true; enable = true;
enableZshIntegration = true; enableZshIntegration = true;
shellWrapperName = "y"; 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; enable = true;
extensions = [ extensions = [
"nix" "nix"
"catppuccin"
]; ];
extraPackages = [ pkgs.nixd ]; extraPackages = [ pkgs.nixd ];
userSettings = { userSettings = {
theme = "Catppuccin Mocha"; theme = "Noctalia Dark";
features = { features = {
edit_prediction_provider = "copilot"; edit_prediction_provider = "copilot";
}; };

View File

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

View File

@@ -1,27 +0,0 @@
############ Variables ############
enable_battery=false
battery_charging=false
####### Check availability ########
for battery in /sys/class/power_supply/*BAT*; do
if [[ -f "$battery/uevent" ]]; then
enable_battery=true
if [[ $(cat /sys/class/power_supply/*/status | head -1) == "Charging" ]]; then
battery_charging=true
fi
break
fi
done
############# Output #############
if [[ $enable_battery == true ]]; then
if [[ $battery_charging == true ]]; then
echo -n "(+) "
fi
echo -n "$(cat /sys/class/power_supply/*/capacity | head -1)"%
if [[ $battery_charging == false ]]; then
echo -n " remaining"
fi
fi
echo ""

View File

@@ -1,7 +0,0 @@
MAIN_KB_CAPS=$(hyprctl devices | grep -B 6 "main: yes" | grep "capsLock" | head -1 | awk '{print $2}')
if [ "$MAIN_KB_CAPS" = "yes" ]; then
echo "Caps Lock active"
else
echo ""
fi

View File

@@ -4,16 +4,6 @@
{ {
nixpkgs.overlays = [ nixpkgs.overlays = [
(import ./heybrochecklog.nix) (import ./heybrochecklog.nix)
(import ./pywalfox-native.nix)
(self: super: {
# battery-status = prev.writeShellApplication {
# name = "battery-status";
# text = builtins.readFile ./battery-status.sh;
# };
check-capslock = super.writeShellApplication {
name = "check-capslock";
text = builtins.readFile ./check-capslock.sh;
};
})
]; ];
} }

View File

@@ -0,0 +1,16 @@
self: super: with super.python3Packages; {
heybrochecklog = buildPythonApplication rec {
pname = "pywalfox-native";
version = "2.8.0rc1";
pyproject = true;
src = super.fetchurl {
url = "https://test-files.pythonhosted.org/packages/89/a1/8e011e2d325de8e987f7c0a67222448b252fc894634bfa0d3b3728ec6dbf/pywalfox-${version}.tar.gz";
sha256 = "89e0d7a441eb600933440c713cddbfaecda236bde7f3f655db0ec20b0ae12845";
};
build-system = [ setuptools ];
pythonImportsCheck = [ "pywalfox" ];
};
}

View File

@@ -3,8 +3,6 @@
config, config,
pkgs, pkgs,
lib, lib,
host,
hostPubkey ? null,
... ...
}: }:
{ {
@@ -25,13 +23,13 @@
rekey = { rekey = {
masterIdentities = [ "${inputs.self}/secrets/age-yubikey-identity-d9ed335b.pub" ]; masterIdentities = [ "${inputs.self}/secrets/age-yubikey-identity-d9ed335b.pub" ];
storageMode = "local"; storageMode = "local";
localStorageDir = ../../. + "/secrets/rekeyed/${host}"; localStorageDir = ../../. + "/secrets/rekeyed/${config.host.name}";
} }
# We only set the hostPubkey if one is supplied. For new hosts the pub key will not # We only set the hostPubkey if one is supplied. For new hosts the pub key will not
# exist until it is generated after the first rebuild. Runtime decryption will fail # exist until it is generated after the first rebuild. Runtime decryption will fail
# but then the ssh host key will be generated in /etc/ssh and can be supplied # but then the ssh host key will be generated in /etc/ssh and can be supplied
// lib.optionalAttrs (hostPubkey != null) { // lib.optionalAttrs (config.host.pubKey != null) {
inherit hostPubkey; hostPubkey = config.host.pubKey;
}; };
secrets = { secrets = {
tailscale-auth.rekeyFile = ../../secrets/tailscale-auth.age; tailscale-auth.rekeyFile = ../../secrets/tailscale-auth.age;

View File

@@ -12,6 +12,8 @@
}; };
efi.canTouchEfiVariables = true; efi.canTouchEfiVariables = true;
}; };
kernelParams = [ "kvm.enable_virt_at_load=0" ]; kernelParams = [
"kvm.enable_virt_at_load=0" # Fixes some virtuallization issues
];
}; };
} }

View File

@@ -1,59 +1,29 @@
{ {
inputs, inputs,
pkgs,
... ...
}: }:
let
sddm-theme = inputs.silentSDDM.packages.${pkgs.stdenv.hostPlatform.system}.default;
in
{ {
imports = [ imports = [
inputs.mango.nixosModules.mango inputs.niri.nixosModules.niri
]; ];
programs = { programs = {
hyprland = { niri.enable = true;
uwsm = {
enable = true; enable = true;
# withUWSM = true; waylandCompositors = {
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland; niri = {
portalPackage = prettyName = "Niri";
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland; binPath = "/run/current-system/sw/bin/niri-session";
};
mango.enable = true;
# uwsm.enable = true;
};
environment.systemPackages = [
sddm-theme
sddm-theme.test
];
services.displayManager = {
defaultSession = "mango";
sddm = {
enable = true;
package = pkgs.kdePackages.sddm;
theme = sddm-theme.pname;
extraPackages = sddm-theme.propagatedBuildInputs;
settings = {
General = {
GreeterEnvironment = "QML2_IMPORT_PATH=${sddm-theme}/share/sddm/themes/${sddm-theme.pname}/components/,QT_IM_MODULE=qtvirtualkeyboard";
InputMethod = "qtvirtualkeyboard";
}; };
}; };
wayland.enable = true;
}; };
}; };
# Enable the KDE Plasma Desktop Environment. services.displayManager = {
# displayManager.sddm.enable = true; gdm = {
# desktopManager.plasma5.enable = true; enable = true;
wayland = true;
# Enable the System76 Cosmic Desktop Environment };
# displayManager.cosmic-greeter.enable = true; };
# desktopManager.cosmic = {
# enable = true;
# xwayland.enable = true;
# };
} }

View File

@@ -40,6 +40,5 @@ in
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
cifs-utils cifs-utils
# rclone
]; ];
} }

View File

@@ -1,10 +1,10 @@
{ {
host, config,
... ...
}: }:
{ {
networking = { networking = {
hostName = "${host}"; # Define your hostname hostName = "${config.host.name}"; # Define your hostname
# Pick only one of the below networking options. # Pick only one of the below networking options.
# wireless.enable = true; # Enables wireless support via wpa_supplicant. # wireless.enable = true; # Enables wireless support via wpa_supplicant.

View File

@@ -19,6 +19,7 @@
# }; # };
gdk-pixbuf.modulePackages = [ pkgs.librsvg ]; gdk-pixbuf.modulePackages = [ pkgs.librsvg ];
nix-ld.enable = true; nix-ld.enable = true;
xwayland.enable = true;
zsh.enable = true; zsh.enable = true;
}; };
@@ -38,6 +39,7 @@
systemPackages = with pkgs; [ systemPackages = with pkgs; [
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
git git
disktui
]; ];
variables = { variables = {
EDITOR = "vim"; EDITOR = "vim";

View File

@@ -14,7 +14,6 @@
layout = "us"; layout = "us";
variant = ""; variant = "";
}; };
}; };
# Enable touchpad support (enabled default in most desktopManager). # Enable touchpad support (enabled default in most desktopManager).
@@ -92,7 +91,7 @@
hardware = { hardware = {
bluetooth = { bluetooth = {
enable = true; enable = true;
powerOnBoot = true; powerOnBoot = false;
}; };
sane = { sane = {
enable = true; enable = true;

View File

@@ -22,6 +22,8 @@
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=" "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
]; ];
extra-substituters = [ "https://vicinae.cachix.org" ];
extra-trusted-public-keys = [ "vicinae.cachix.org-1:1kDrfienkGHPYbkpNj1mWTr7Fm1+zcenzgTizIcI3oc=" ];
}; };
}; };

View File

@@ -1,8 +1,6 @@
{ {
inputs, inputs,
pkgs, pkgs,
host,
wallpaper,
config, config,
... ...
}: }:
@@ -12,7 +10,7 @@
home-manager = { home-manager = {
useUserPackages = true; useUserPackages = true;
useGlobalPkgs = true; useGlobalPkgs = true;
extraSpecialArgs = { inherit inputs host wallpaper; }; extraSpecialArgs = { inherit inputs; };
users.eclypse = { users.eclypse = {
imports = [ ../home ]; imports = [ ../home ];

View File

@@ -3,9 +3,7 @@
}: }:
{ {
imports = [ imports = [
./hypridle.nix
./hyprland.nix ./hyprland.nix
./hyprlock.nix
./keybinds.nix ./keybinds.nix
./monitors.nix ./monitors.nix
./pyprland.nix ./pyprland.nix

View File

@@ -1,5 +1,5 @@
{ {
# inputs, inputs,
pkgs, pkgs,
config, config,
... ...
@@ -10,20 +10,24 @@
hyprpicker hyprpicker
]; ];
# xdg.configFile."uwsm/env".source =
# "${config.home.sessionVariablesPackage}/etc/profile.d/hm-session-vars.sh";
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
# systemd.enable = false; systemd.enable = false;
package = null; package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
portalPackage = null; portalPackage =
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
settings = { settings = {
source = [ source = [
"${config.xdg.configHome}/hypr/monitors.conf" "${config.xdg.configHome}/hypr/monitors.conf"
"${config.xdg.configHome}/hypr/noctalia/noctalia-colors.conf"
]; ];
# monitor = [
# "desc:BOE 0x095F,2256x1504@60.00,0x0,1"
# "desc:LG Electronics LG TV SSCR2 0x01010101,3840x2160@120.00,2256x0,1"
# ];
animations = { animations = {
# Stolen from https://github.com/Vobledoble/nixparency-dots/ # Stolen from https://github.com/Vobledoble/nixparency-dots/
enabled = true; enabled = true;
@@ -54,48 +58,57 @@
]; ];
}; };
debug.disable_logs = false;
general = { general = {
gaps_in = 5; gaps_in = 5;
gaps_out = 10; gaps_out = 10;
border_size = 2; border_size = 2;
"col.active_border" = "rgb(4479A4)";
"col.inactive_border" = "rgba(4479A480)";
}; };
decoration = { decoration = {
rounding = 10; rounding = 20;
rounding_power = 2;
active_opacity = 0.95; # active_opacity = 0.95;
inactive_opacity = 0.85; # inactive_opacity = 0.85;
fullscreen_opacity = 1.0; # fullscreen_opacity = 1.0;
blur = { blur = {
enabled = true; enabled = true;
size = 8; size = 3;
passes = 3; passes = 2;
vibrancy = 0.1696;
new_optimizations = true; new_optimizations = true;
popups = true; popups = true;
}; };
shadow.enabled = false; shadow = {
enabled = true;
range = 4;
render_power = 3;
color = "rgba(1a1a1aee)";
};
};
input = {
kb_layout = "us";
kb_options = "compose:ralt";
}; };
misc = { misc = {
vfr = true; vfr = true;
}; };
layerrule = [ windowrule = {
"blur, waybar" # Add blur to waybar name = "floating-terminal-dropdown";
"blurpopups, waybar" # Blur waybar popups too! "match:class" = "term_dropdown";
"ignorealpha 0.2, waybar" # Make it so transparent parts are ignored float = "on";
]; };
exec-once = [ exec-once = [
"systemctl --user enable --now hypridle.service"
"systemctl --user enable --now hyprpolkitagent.service" "systemctl --user enable --now hyprpolkitagent.service"
"systemctl --user enable app-com.mitchellh.ghostty.service" "noctalia-shell"
"wpaperd -d"
"swaync"
"pypr" "pypr"
]; ];

View File

@@ -6,14 +6,13 @@
exec = "hyprctl dispatch submap global"; exec = "hyprctl dispatch submap global";
submap = "global"; submap = "global";
# MY STUFF
"$mod" = "SUPER"; "$mod" = "SUPER";
bind = [ bind = [
"$mod, Q, killactive" "$mod, Q, killactive"
"$mod, W, exec, foot" "$mod, W, exec, foot"
"$mod, S, exec, walker" "$mod, S, exec, vicinae toggle"
"$mod, Escape, exec, wlogout" "$mod, Escape, exec, noctalia-shell ipc call sessionMenu toggle"
# Window Movement # Window Movement
"$mod, left, movefocus, l" "$mod, left, movefocus, l"
@@ -30,9 +29,8 @@
"$mod CTRL SHIFT, right, movetoworkspace, r+1" "$mod CTRL SHIFT, right, movetoworkspace, r+1"
# Screenshoting # Screenshoting
", PRINT, exec, hyprshot -m output --raw | satty --filename -" ", PRINT, exec, grim -g \"$(slurp)\" - | wl-copy"
"$mod, PRINT, exec, hyprshot -m window --raw | satty --filename -" "SHIFT, PRINT, exec, wl-paste | swappy -f -"
"SHIFT, PRINT, exec, hyprshot -m region --raw | satty --filename -"
# Media Control Keys # Media Control Keys
", XF86AudioPrev, exec, playerctl previous" ", XF86AudioPrev, exec, playerctl previous"
@@ -42,7 +40,7 @@
"ALT, XF86AudioMute, exec, pamixer --default-source -t" "ALT, XF86AudioMute, exec, pamixer --default-source -t"
# Notification Center # Notification Center
"$mod, n, exec, swaync-client -t -sw" "$mod, n, exec, noctalia-shell ipc call notifications toggleHistory"
# Scratchpads # Scratchpads
"$mod, TAB, exec, pypr toggle term" "$mod, TAB, exec, pypr toggle term"

View File

@@ -15,5 +15,8 @@
home.hyprdynamicmonitors = { home.hyprdynamicmonitors = {
enable = true; enable = true;
installExamples = false; installExamples = false;
extraFlags = [
"--enable-lid-events"
];
}; };
} }

View File

@@ -16,6 +16,7 @@
class = "term_dropdown" class = "term_dropdown"
animation = "fromTop" animation = "fromTop"
margin = 150 margin = 150
size = "80% 80%"
max_size = "1920px 1080px" max_size = "1920px 1080px"
multi = false multi = false
''; '';

View File

@@ -8,7 +8,7 @@
general = { general = {
lock_cmd = "pidof hyprlock || hyprlock --grace 10"; lock_cmd = "pidof hyprlock || hyprlock --grace 10";
before_sleep_cmd = "loginctl lock-session"; before_sleep_cmd = "loginctl lock-session";
fail_timeout = 1000; after_sleep_cmd = "hypctl dispatch dpms on";
}; };
listener = [ listener = [
{ {
@@ -22,7 +22,7 @@
} }
{ {
timeout = 600; timeout = 600;
on-timeout = "systemctl suspend || loginctl suspend"; on-timeout = "systemctl suspend";
} }
]; ];
}; };

87
modules/unused/mango.nix Normal file
View File

@@ -0,0 +1,87 @@
{
inputs,
config,
...
}:
{
imports = [
inputs.mango.hmModules.mango
];
wayland.windowManager.mango = {
enable = true;
settings = ''
source=${config.xdg.configHome}/mango/noctalia.conf
monitorrule=name:eDP-1,width:2256,height:1504,refresh:59.999001,x:0,y:0,scale:1.0,vrr:0,rr:0
monitorrule=name:LG Electronics LG TV SSCR2 *,width:3840,height:2160,refresh:120.0,x:2256,y:0,scale:1.0,vrr:0,rr:0
cursor_size=16
cursor_theme=catppuccin-mocha-dark-cursors
bind=SUPER,q,killclient
bind=SUPER,w,spawn,foot
bind=SUPER,a,spawn,vicinae toggle
bind=SUPER,Escape,spawn,noctalia-shell ipc call sessionMenu toggle
bind=SUPER,n,spawn,noctalia-shell ipc call notifications toggleHistory
bind=SUPER+SHIFT,r,reload_config
bind=SUPER,t,setlayout,tile
bind=SUPER,s,setlayout,scroller
bind=SUPER,f,togglefloating
bind=SUPER+SHIFT,f,togglefullscreen
bind=NONE,XF86AudioPrev,spawn,playerctl previous
bind=NONE,XF86AudioPlay,spawn,playerctl play-pause
bind=NONE,XF86AudioNext,spawn,playerctl next
bindl=NONE,XF86AudioRaiseVolume,spawn,pamixer -i 5
bindl=NONE,XF86AudioLowerVolume,spawn,pamixer -d 5
bindl=NONE,XF86AudioMute,spawn,pamixer -t
bindl=ALT,XF86AudioRaiseVolume,spawn,pamixer --default-source -i 5
bindl=ALT,XF86AudioLowerVolume,spawn,pamixer --default-source -d 5
bindl=ALT,XF86AudioMute,spawn,pamixer --default-source -t
bindl=NONE,XF86MonBrightnessUp,spawn,brightnessctl set 5%+
bindl=NONE,XF86MonBrightnessDown,spawn,brightnessctl set 5%-
bind=NONE,Print,spawn_shell,grim -g "$(slurp)" - | wl-copy
bind=SHIFT,Print,spawn_shell,wl-paste | swappy -f -
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
bind=SUPER+CTRL,Left,viewtoleft
bind=SUPER+CTRL,Right,viewtoright
bind=SUPER+CTRL+SHIFT,Left,tagtoleft
bind=SUPER+CTRL+SHIFT,Right,tagtoright
mousebind=SUPER,btn_left,moveresize,curmove
mousebind=SUPER,btn_right,moveresize,curresize
mousebind=SUPER+ALT,btn_left,moveresize,curresize
bind=SUPER,Tab,toggleoverview
blur=1
blur_params_radius=6
blur_params_num_passes=2
windowrule=blur:1,unfocused_opacity:0.95,focused_opacity:0.95,appid:foot
exec-once=${config.xdg.configHome}/mango/autostart.sh
'';
autostart_sh = ''
dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=wlroots
noctalia-shell
'';
};
}

View File

@@ -1,5 +1,6 @@
{ {
pkgs, pkgs,
config,
... ...
}: }:
{ {
@@ -54,7 +55,7 @@
# VSCode attempts to write to ~/.ssh/config for remote ssh connections. # VSCode attempts to write to ~/.ssh/config for remote ssh connections.
# Because ~/.ssh/config is managed with home-manager, it is not writeable. # Because ~/.ssh/config is managed with home-manager, it is not writeable.
# So we specify a custom ssh config path # So we specify a custom ssh config path
"remote.SSH.configFile" = "/home/eclypse/.ssh/vscode-config"; "remote.SSH.configFile" = "${config.home.homeDirectory}/.ssh/vscode-config";
# Prettier # Prettier
"editor.defaultFormatter" = "esbenp.prettier-vscode"; "editor.defaultFormatter" = "esbenp.prettier-vscode";

View File

@@ -3,7 +3,7 @@
}: }:
{ {
programs.waybar = { programs.waybar = {
enable = true; enable = false;
systemd.enable = true; systemd.enable = true;
settings = [ settings = [
{ {