Initial commit for phosphorous branch

This commit is contained in:
2025-07-29 12:17:29 -04:00
parent caeb108974
commit 82d34571c8
23 changed files with 720 additions and 501 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,2 @@
result result
target target
hardware.nix

50
flake.lock generated
View File

@@ -105,11 +105,11 @@
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1752113600, "lastModified": 1752718651,
"narHash": "sha256-7LYDxKxZgBQ8LZUuolAQ8UkIB+jb4A2UmiR+kzY9CLI=", "narHash": "sha256-PkaR0qmyP9q/MDN3uYa+RLeBA0PjvEQiM0rTDDBXkL8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "79264292b7e3482e5702932949de9cbb69fedf6d", "rev": "d5ad4485e6f2edcc06751df65c5e16572877db88",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -269,11 +269,11 @@
"zon2nix": "zon2nix" "zon2nix": "zon2nix"
}, },
"locked": { "locked": {
"lastModified": 1752468632, "lastModified": 1752781573,
"narHash": "sha256-3Hmq3XMTPg12zWmNsDgxTCsXDthBi+Umfv/XeNsa9Es=", "narHash": "sha256-lciLQos2xk62PrLi/RbD12V8Da5xAysPnhP4KvI3Jho=",
"owner": "ghostty-org", "owner": "ghostty-org",
"repo": "ghostty", "repo": "ghostty",
"rev": "37c2c3a4ba696e90f0be2b7c2c0cd6f613dbf70a", "rev": "155ddc3f8f0e99731d30f15653c62ac7e2476c46",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -328,11 +328,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1752467539, "lastModified": 1752798675,
"narHash": "sha256-4kaR+xmng9YPASckfvIgl5flF/1nAZOplM+Wp9I5SMI=", "narHash": "sha256-oMJhxLVGVC7v0ReNQ/vFVKMQOPUixg/74MnZZ1Wkv4s=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "1e54837569e0b80797c47be4720fab19e0db1616", "rev": "dcfd70f80fe6d872c2dc58fe3be384a681e56fea",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -433,11 +433,11 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1752500930, "lastModified": 1752782660,
"narHash": "sha256-bQlflVQSUwSWm//WJX9mPGXsouRKyS6fGfOmkMvYR5s=", "narHash": "sha256-lv5ohWVV8P/T8QBzSBmGVo45oxc4a7snwHF05KRwaK8=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "06fcdbd9c77c90fc9c3115b646f602a84c53a40e", "rev": "a05c797e4a7b32f933569aec6cfba180bc693528",
"revCount": 6273, "revCount": 6286,
"submodules": true, "submodules": true,
"type": "git", "type": "git",
"url": "https://github.com/hyprwm/Hyprland" "url": "https://github.com/hyprwm/Hyprland"
@@ -736,11 +736,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1751949589, "lastModified": 1752596105,
"narHash": "sha256-mgFxAPLWw0Kq+C8P3dRrZrOYEQXOtKuYVlo9xvPntt8=", "narHash": "sha256-lFNVsu/mHLq3q11MuGkMhUUoSXEdQjCHvpReaGP1S2k=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9b008d60392981ad674e04016d25619281550a9d", "rev": "dab3a6e781554f965bde3def0aa2fda4eb8f1708",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -813,11 +813,11 @@
}, },
"nixpkgs_6": { "nixpkgs_6": {
"locked": { "locked": {
"lastModified": 1751984180, "lastModified": 1752480373,
"narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=", "narHash": "sha256-JHQbm+OcGp32wAsXTE/FLYGNpb+4GLi5oTvCxwSoBOA=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0", "rev": "62e0f05ede1da0d54515d4ea8ce9c733f12d9f08",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -853,11 +853,11 @@
"systems": "systems_5" "systems": "systems_5"
}, },
"locked": { "locked": {
"lastModified": 1752496197, "lastModified": 1752762787,
"narHash": "sha256-yADANK6gJL+BJrL0f450RGCZlUixCuYSoEqdjmBE5nY=", "narHash": "sha256-WZLSOR2Pei7C4nH/ntKUqOZOAa5rgvc2fVZl4RoEXmw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixvim", "repo": "nixvim",
"rev": "03fa28a65f23210934cb3a3c0454eb8870af748b", "rev": "bc0555c8694d43fb63ae2c7afec08b6987431a04",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -992,11 +992,11 @@
"tinted-zed": "tinted-zed" "tinted-zed": "tinted-zed"
}, },
"locked": { "locked": {
"lastModified": 1752449117, "lastModified": 1752750082,
"narHash": "sha256-Cn24ySH/LN/Q/SsDhpOX4cTMYZa1JMOLNeNsoYqcZpY=", "narHash": "sha256-NoVAqy+Wj4tgkvrYB8zWncl8Z6Hb80aX3t/TYGdsfaM=",
"owner": "danth", "owner": "danth",
"repo": "stylix", "repo": "stylix",
"rev": "d683e35fa5ec8bbfd45d52e4b53c7b91f7b38d06", "rev": "03699ed214f6e8195bc7199d6ae3aeccf9732b08",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -60,6 +60,25 @@
nixvim.homeManagerModules.nixvim nixvim.homeManagerModules.nixvim
]; ];
}; };
phosphorousHome = let host = "phosphorous"; in home-manager.lib.homeManagerConfiguration {
pkgs = import nixpkgs {
inherit system;
config = nixpkgsConfig;
overlays = [
(import ./overlay/overlay.nix { inherit host; root = self; })
];
};
extraSpecialArgs = {
inherit host self username inputs;
};
modules = [
./hosts/work/home.nix
./modules/home
stylix.homeManagerModules.stylix
nixvim.homeManagerModules.nixvim
];
};
mercuryHome = let host = "mercury"; in home-manager.lib.homeManagerConfiguration { mercuryHome = let host = "mercury"; in home-manager.lib.homeManagerConfiguration {
pkgs = import nixpkgs { pkgs = import nixpkgs {
@@ -126,6 +145,29 @@
]; ];
}; };
phosphorous = nixpkgs.lib.nixosSystem { # Desktop
specialArgs = {
inherit self inputs username;
host = "oganesson";
overlays = [
(import ./overlay/overlay.nix { root = self; })
];
};
inherit system;
pkgs = import nixpkgs {
inherit system;
config = nixpkgsConfig;
overlays = [
(import ./overlay/overlay.nix { root = self; })
];
};
modules = [
./hosts/work/config.nix
./modules/sys
stylix.nixosModules.stylix
];
};
mercury = nixpkgs.lib.nixosSystem { # Laptop mercury = nixpkgs.lib.nixosSystem { # Laptop
specialArgs = { specialArgs = {
inherit self inputs username; inherit self inputs username;

54
hosts/work/config.nix Executable file
View File

@@ -0,0 +1,54 @@
{ slash, pkgs, username, ... }:
{
imports = [
./hardware.nix
];
# My module options
movOpts = {
sysEnv = {
issue.enable = true;
sddmConfig.enable = false;
stylixConfig.enable = true;
nixSettings.enable = true;
#consoleSettings.enable = true;
};
hardwareCfg = {
networkModule.enable = true;
kernelModule.enable = true;
bootLoader.enable = true;
};
softwareCfg = {
gamingPkgs.enable = true;
steamConfig.enable = true;
sysPkgs.enable = true;
sysProgs.enable = true;
sysServices.enable = true;
virtConfig.enable = true;
};
};
environment = {
variables = { PATH = "${pkgs.clang-tools}/bin:$PATH"; };
shells = [ pkgs.myPkgs.slash pkgs.zsh pkgs.bash ];
};
users = {
groups.persist = { };
users = {
root.initialPassword = "1234";
${username} = {
isNormalUser = true;
initialPassword = "1234";
shell = pkgs.zsh;
extraGroups = [ "input" "wheel" "persist" "libvirtd" ];
};
};
};
security.sudo.extraConfig = ''
${username} ALL=(ALL) NOPASSWD: /etc/profiles/per-user/${username}/bin/rebuild
'';
nix.settings.allowed-users = [ "${username}" ];
time.timeZone = "America/New_York";
}

126
hosts/work/containers.nix Normal file
View File

@@ -0,0 +1,126 @@
{ slash, pkgs, username, ... }:
let
kickstartServer =
let
libsrcds = pkgs.stdenv.mkDerivation {
name = "libsrcds";
src = pkgs.fetchFromGitHub {
owner = "km-clay";
repo = "sourceds-libraries";
rev = "08d12c91af664ffd103482ae1a24714222bef2df";
hash = "sha256-EFXBhqZEkBNpYjNuG7oTZLgfjqM5G+nLb7e/qeN1Tvw=";
};
installPhase = ''
mkdir -p $out/lib
cp ./* $out/lib
'';
};
startTf2Server = pkgs.writeShellScript "start-srv.sh" ''
set -euo pipefail
export HOME=/home/tf2
export LD_LIBRARY_PATH=/usr/lib:/usr/lib32
mkdir -p "$HOME/tf2server"
mkdir -p "$HOME/tf2server"
steamcmd +force_install_dir "$HOME/tf2server" \
+login anonymous \
+app_update 232250 validate \
+quit
cd "$HOME/tf2server"
ln -sf "$HOME/.steam/steam/linux64" "$HOME/.steam/sdk64"
ln -sf "$HOME/.steam/steam/linux32" "$HOME/.steam/sdk32"
exec ./srcds_run -game tf -console -port 25565 +map cp_dustbowl \
+ip 10.233.1.2 -norestart \
+sv_setsteamaccount 8862FD4B30F401036B8AAC6A7FE6B123
'';
in
pkgs.buildFHSEnv {
name = "srcds-env";
targetPkgs = pkgs: with pkgs; [
steamcmd
glibc
zlib
curl
libuuid
openssl
libnl
libsrcds
# Optional: link compat
stdenv.cc.cc.lib
];
multiPkgs = pkgs: with pkgs.pkgsi686Linux; [
glibc
zlib
ncurses5
libuuid
alsa-lib
libxcrypt-legacy
gcc
];
multiArch = true;
runScript = "${startTf2Server}";
};
in
{
networking = {
nat = {
enable = true;
internalInterfaces = ["ve-+"];
externalInterface = "enp8s0";
};
};
containers.tf2server = {
autoStart = true;
privateNetwork = true;
hostAddress = "10.233.1.1";
localAddress = "10.233.1.2";
config = {
imports = [ ];
nixpkgs.config.allowUnfree = true;
services.openssh.enable = true;
users.users.root.password = "root"; # For quick login, remove in prod
environment.systemPackages = with pkgs; [
steamcmd
steam-run
coreutils
wget
unzip
bash
nix
coreutils
vim
];
users.users.tf2server = {
isNormalUser = true;
initialPassword = "1234";
shell = pkgs.bash;
extraGroups = [ "wheel" ];
};
systemd.services.tf2server = {
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${kickstartServer}/bin/srcds-env";
};
};
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# Optional: open ports on the container
networking.firewall.allowedTCPPorts = [ 25565 ];
networking.firewall.allowedUDPPorts = [ 25565 27005 27015 27020 ];
system.stateVersion = "25.11"; # or your NixOS version
};
};
}

37
hosts/work/hardware.nix Normal file
View File

@@ -0,0 +1,37 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/profiles/qemu-guest.nix")
];
boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sr_mod" "virtio_blk" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/db4cf956-df00-4c26-851d-419136434eae";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/336C-A94E";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

57
hosts/work/home.nix Executable file
View File

@@ -0,0 +1,57 @@
{ username, ... }: {
home.username = "${username}";
home.homeDirectory =
"/home/${username}";
home.stateVersion = "25.05";
programs.home-manager.enable = true;
movOpts = {
# modules/home/files
homeFiles.enable = true;
# modules/home/environment
envConfig = {
hyprlandConfig = {
enable = true;
monitorNames = [ "DP-3" "DP-1" ];
workspaceLayout = "dualmonitor";
};
userPkgs.enable = true;
stylixHomeConfig.enable = true;
waybarConfig.enable = true;
gtkConfig.enable = true;
spicetifyConfig.enable = false;
starshipConfig.enable = true;
swayncConfig.enable = true;
zshConfig = {
shellAliases.enable = true;
envVariables.enable = true;
shellOptions.enable = true;
extraConfig.enable = true;
};
};
# modules/home/programs
programConfigs = {
autojumpConfig.enable = true;
btopConfig.enable = true;
cavaConfig.enable = false;
ezaConfig.enable = true;
fuzzelConfig.enable = true;
fzfConfig.enable = true;
gitConfig.enable = true;
kittyConfig.enable = true;
yaziConfig.enable = true;
passConfig.enable = true;
batConfig.enable = true;
};
};
dconf.settings = {
"org/virt-manager/virt-manager/connections" = {
autoconnect = [ "qemu:///system" ];
uris = [ "qemu:///system" ];
};
};
}

View File

@@ -2,9 +2,10 @@
let let
desktop = host == "oganesson"; desktop = host == "oganesson";
screenshot_bind = if desktop then screenshot_bind = if desktop then
[ "super, print, exec, grimblast copy area" [
"super, print, exec, grimblast copy area"
"super shift, print, exec, grimblast --freeze copy area" "super shift, print, exec, grimblast --freeze copy area"
] ]
else else
[ [
# My laptop does not have a printscreen button # My laptop does not have a printscreen button
@@ -12,7 +13,16 @@ let
]; ];
scheme = config.lib.stylix.colors; scheme = config.lib.stylix.colors;
mons = config.movOpts.envConfig.hyprlandConfig.monitorNames; mons = config.movOpts.envConfig.hyprlandConfig.monitorNames;
smartGapsWorkspaces = [
"w[tv1], gapsout:0, gapsin:0"
"f[1], gapsout:0, gapsin:0"
];
smartGapsWindowrules = [
"bordersize 0, floating:0, onworkspace:w[tv1]"
"rounding 0, floating:0, onworkspace:w[tv1]"
"bordersize 0, floating:0, onworkspace:f[1]"
"rounding 0, floating:0, onworkspace:f[1]"
];
in { in {
options = { options = {
@@ -55,6 +65,9 @@ in {
monitor = if (host == "oganesson") then [ monitor = if (host == "oganesson") then [
"DP-1, 1920x1080@144, 1920x0, 1" "DP-1, 1920x1080@144, 1920x0, 1"
"HDMI-A-1, 1920x1080, 0x0, 1" "HDMI-A-1, 1920x1080, 0x0, 1"
] else if (host == "phosphorous") then [
"DP-1, highrr, 0x0, 1"
"DP-3, highrr, -1080x-420, 1, transform, 3"
] else ] else
[ "eDP-1, 1600x900, 0x0, 1" ]; [ "eDP-1, 1600x900, 0x0, 1" ];
@@ -69,7 +82,7 @@ in {
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &" "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &"
]; ];
workspace = if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "dualmonitor") then [ workspace = (if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "dualmonitor") then [
"1,persistent=true,monitor:${builtins.elemAt mons 0}" "1,persistent=true,monitor:${builtins.elemAt mons 0}"
"2,persistent=true,monitor:${builtins.elemAt mons 0}" "2,persistent=true,monitor:${builtins.elemAt mons 0}"
"3,persistent=true,monitor:${builtins.elemAt mons 0}" "3,persistent=true,monitor:${builtins.elemAt mons 0}"
@@ -88,7 +101,7 @@ in {
"4,persistent=true,monitor:${builtins.elemAt mons 1}" "4,persistent=true,monitor:${builtins.elemAt mons 1}"
"5,persistent=true,monitor:${builtins.elemAt mons 0}" "5,persistent=true,monitor:${builtins.elemAt mons 0}"
"6,persistent=true,monitor:${builtins.elemAt mons 0}" "6,persistent=true,monitor:${builtins.elemAt mons 0}"
] else [ ]; ] else [ ]) ++ smartGapsWorkspaces;
env = [ env = [
"XDG_CONFIG_HOME,$HOME/.config" "XDG_CONFIG_HOME,$HOME/.config"
@@ -96,6 +109,37 @@ in {
"XDG_CACHE_HOME,$HOME/.cache" "XDG_CACHE_HOME,$HOME/.cache"
]; ];
layerrule = [ "blur,waybar" "ignorezero,waybar" "blur,launcher" ]; layerrule = [ "blur,waybar" "ignorezero,waybar" "blur,launcher" ];
windowrulev2 = [
"float, class:^(thunar)$,title:^(.*File Operation Progress.*)$"
"float, class:^(firefox)$,title:^(Library)$"
"float, class:^(thunar)$,title:^(File Operation Progress)$"
"float, class:^(thunar)$,title:^(Confirm to replace files)$"
"float, title:^(bwarn)$"
"float, title:^(bwarn)$"
"noinitialfocus, class:^(steam)$"
"float, class:^(firefox)$,title:^( - Google Mozilla Firefox)$"
"float, class:^(firefox)$,title:^(Firefox Sharing Indicator)$"
"float, class:^(firefox)$,title:^(Firefox )$"
"float, class:(firefox), title:^(*.Sign in.*)$"
];
windowrule = [
"float, class:^(qt5ct)$"
"float, class:^(zoom)$"
"float, class:^(Steam)$"
"idleinhibit focus, class:mpv"
"float, title:^(Picture-in-Picture)$"
"float, class:^(nm-connection-editor)$"
"float, class:^(waypaper)$"
"float, title:^(Sign In)(.*)$"
"float, title:^(Firefox )$"
"nofocus, title:^(Firefox )$"
"float, class:^(firefox)$,title^(Sign in - Google Accounts Mozilla Firefox)$"
"= nofullscreenrequest, title:^(Firefox )$"
"size 0 0, title:^(Firefox )$"
"move 100%-470 15,title:^(Firefox Sharing Indicator)$"
"move 100%-470 15,title:^(Firefox )$"
] ++ smartGapsWindowrules;
input = { input = {
kb_layout = "us"; kb_layout = "us";
@@ -105,14 +149,19 @@ in {
sensitivity = 0; sensitivity = 0;
}; };
general = { general = {
"$mainMod" = "super"; gaps_in = 5;
layout = "dwindle"; gaps_out = 9;
gaps_in = 4;
gaps_out = 8;
border_size = 3; border_size = 3;
#"col.inactive_border" = "0xff${scheme.base01}"; col.active_border = "rgba(404042ff)";
"col.active_border" = lib.mkForce "0xff${scheme.base04}"; col.inactive_border = "rgba(83858a00)";
layout = "dwindle";
resize_on_border = true;
no_border_on_floating = false; no_border_on_floating = false;
snap = {
enabled = true;
window_gap = 5;
};
}; };
misc = { misc = {
disable_autoreload = true; disable_autoreload = true;
@@ -125,10 +174,7 @@ in {
}; };
dwindle = { dwindle = {
force_split = 0; force_split = 2;
special_scale_factor = 1.0;
split_width_multiplier = 1.0;
use_active_for_splits = true;
pseudotile = "yes"; pseudotile = "yes";
preserve_split = "yes"; preserve_split = "yes";
}; };
@@ -139,52 +185,40 @@ in {
}; };
decoration = { decoration = {
rounding = 10; rounding = 4;
blur = { shadow = {
enabled = true; enabled = true;
# size = 1; ignore_window = true;
# passes = 1; range = 80;
size = 2; render_power = 50;
passes = 1; color = "rbga(00000065)";
brightness = 1; };
contrast = 1.4;
ignore_opacity = true;
popups = true;
noise = 0;
new_optimizations = true;
xray = true;
}; };
cursor = {
hide_on_key_press = true;
};
experimental = {
xx_color_management_v4 = true;
}; };
animations = { animations = {
enabled = true; enabled = true;
bezier = [ bezier = [
"fluent_decel, 0, 0.2, 0.4, 1" "myBezier, 0.16, 1, 0.3, 1"
"easeOutCirc, 0, 0.55, 0.45, 1"
"easeOutCubic, 0.33, 1, 0.68, 1"
"easeinoutsine, 0.37, 0, 0.63, 1"
]; ];
animation = [ animation = [
# Windows "windows, 1, 7, myBezier, popin 80%"
"windowsIn, 1, 3, easeOutCubic, popin 30%" # window open "fade, 1, 7, myBezier"
"windowsOut, 1, 3, fluent_decel, popin 70%" # window close. "workspaces, 1, 6, myBezier, slidefade 80%"
"windowsMove, 1, 2, easeinoutsine, slide" # everything in between, moving, dragging, resizing.
# Fade
"fadeIn, 1, 3, easeOutCubic" # fade in (open) -> layers and windows
"fadeOut, 1, 2, easeOutCubic" # fade out (close) -> layers and windows
"fadeSwitch, 0, 1, easeOutCirc" # fade on changing activewindow and its opacity
"fadeShadow, 1, 10, easeOutCirc" # fade on changing activewindow for shadows
"fadeDim, 1, 4, fluent_decel" # the easing of the dimming of inactive windows
"border, 1, 2.7, easeOutCirc" # for animating the border's color switch speed
"borderangle, 1, 30, fluent_decel, once" # for animating the border's gradient angle - styles: once (default), loop
"workspaces, 1, 4, easeOutCubic, fade" # styles: slide, slidevert, fade, slidefade, slidefadevert
]; ];
};
bind = [ bind = [
"super, up, exec, pactl set-sink-volume @default_sink@ +10%" "super, up, exec, pactl set-sink-volume @default_sink@ +10%"
"super, down, exec, pactl set-sink-volume @default_sink@ -10%" "super, down, exec, pactl set-sink-volume @default_sink@ -10%"
@@ -231,5 +265,4 @@ in {
}; };
}; };
}; };
};
} }

View File

@@ -1,7 +1,7 @@
{ lib, self, config, host, pkgs, ... }: { lib, self, config, host, pkgs, ... }:
let let
scheme = "chalk"; scheme = "ayu-dark";
wallpaper = "${self}/assets/wallpapers/dark-waves.jpg"; wallpaper = "${self}/assets/wallpapers/dark-waves.jpg";
server = (host == "xenon"); server = (host == "xenon");
in { in {

View File

@@ -34,7 +34,6 @@ in {
nemo nemo
feh feh
gtk3 gtk3
gimp
imagemagick imagemagick
vlc vlc
lolcat lolcat

View File

@@ -6,12 +6,26 @@ let
workspaces = { workspaces = {
format = "{icon}"; format = "{icon}";
format-icons = { format-icons = {
"1" = ""; "1" = "1";
"2" = ""; "2" = "2";
"3" = ""; "3" = "3";
"4" = ""; "4" = "4";
"5" = ""; "5" = "5";
"6" = ""; "6" = "6";
"7" = "7";
"8" = "8";
"9" = "9";
"10" = "10";
"11" = "11";
"12" = "12";
"13" = "13";
"14" = "14";
"15" = "15";
"16" = "16";
"17" = "17";
"18" = "18";
"19" = "19";
"20" = "20";
}; };
persistent-workspaces = persistent-workspaces =
if (layout == "singlemonitor") then { if (layout == "singlemonitor") then {
@@ -36,7 +50,7 @@ let
dark = scheme.base03; dark = scheme.base03;
}; };
fg = { fg = {
lightester = scheme.base07; lightest = scheme.base07;
lightest = scheme.base06; lightest = scheme.base06;
lighter = scheme.base05; lighter = scheme.base05;
light = scheme.base04; light = scheme.base04;
@@ -55,6 +69,17 @@ let
circle-gauge = [ "󰝦" "󰪞" "󰪟" "󰪠" "󰪡" "󰪢" "󰪣" "󰪤" "󰪥" ]; circle-gauge = [ "󰝦" "󰪞" "󰪟" "󰪠" "󰪡" "󰪢" "󰪣" "󰪤" "󰪥" ];
cava-gauge = [ "" "" "" "" "" "" "" "" ]; cava-gauge = [ "" "" "" "" "" "" "" "" ];
battery-gauge = [ "󰁺" "󰁻" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ]; battery-gauge = [ "󰁺" "󰁻" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ];
bar-gauge = [
""
""
""
""
""
""
""
""
""
];
in { in {
options = { options = {
movOpts.envConfig.waybarConfig.enable = movOpts.envConfig.waybarConfig.enable =
@@ -68,7 +93,7 @@ in {
}); });
settings = { settings = {
mainBar = { mainBar = {
layer = "bottom"; layer = "top";
output = if layout == "singlemonitor" then builtins.elemAt monitors 0 output = if layout == "singlemonitor" then builtins.elemAt monitors 0
else builtins.elemAt monitors 1; else builtins.elemAt monitors 1;
position = "top"; position = "top";
@@ -77,373 +102,173 @@ in {
margin-top = 5; margin-top = 5;
margin-right = if desktop then 8 else 5; margin-right = if desktop then 8 else 5;
mode = "dock"; mode = "dock";
exclusive = true;
passthrough = false;
"gtk-layer-shell" = true; "gtk-layer-shell" = true;
modules-left = [ "hyprland/workspaces" "cava" ]; modules-left = [ "clock" "hyprland/workspaces" "tray" ];
modules-center = [ "hyprland/window" ]; modules-center = [];
modules-right = [ "group/hardware" "clock" "group/powerbtns" ]; modules-right = [ "cpu" "memory" "pulseaudio" "network" ];
"hyprland/workspaces" = workspaces; "hyprland/workspaces" = workspaces;
cava = {
framerate = 30;
autosens = 1;
sensitivity = 1;
bars = 14;
lower_cutoff_freq = 50;
higher_cutoff_freq = 10000;
method = "pulse";
source = "auto";
hide_on_silence = false;
stereo = true;
reverse = true;
bar_delimiter = 0;
monstercat = false;
waves = false;
noise_reduction = 0.77;
input_delay = 1;
format-icons = cava-gauge;
};
"group/hardware" = {
orientation = "inherit";
modules = [ "custom/disk-icon" "memory" "cpu" ];
};
"custom/disk-icon" = {
exec = ''
df / | awk '
function format(size) {
if (size >= 1024) return sprintf("%.1fTB", size / 1024);
else return sprintf("%.1fGB", size)
}
$6 == "/" {
usage = $3 / 1024 / 1024;
total = $2 / 1024 / 1024;
percent = $5;
sub(/%/, "", percent);
printf "{\"class\": \"disk-icon\", \"tooltip\": \"/: %s / %s\", \"percentage\": %s}\n", format(usage), format(total), percent
}
' | jq --unbuffered --compact-output
'';
interval = 60;
return-type = "json";
rotate = 270;
format = "{icon}";
format-icons = circle-gauge;
};
memory = {
interval = 1;
rotate = 270;
format = "{icon}";
format-icons = circle-gauge;
max-length = 10;
tooltip-format = "RAM: {used:0.1f} GB / {total:0.1f} GB";
};
cpu = {
interval = 1;
rotate = 270;
format = "{icon}";
format-icons = circle-gauge;
tooltip-format = "CPU: {usage:0.1f}%";
};
"custom/power" = {
on-click = "shutdown now";
tooltip = false;
format = " ";
};
"custom/logout" = {
on-click = "hyprctl dispatch exit";
tooltip = false;
format = "󰗽 ";
};
"custom/reboot" = {
on-click = "reboot";
tooltip = false;
format = " ";
};
"group/powerbtns" = {
orientation = "horizontal";
drawer = {
transition-duration = 500;
children-class = "power-drawer";
transition-left-to-right = false;
};
modules = [ "custom/power" "custom/logout" "custom/reboot" ];
};
clock = { clock = {
format = "{:%I:%M %p}"; format = "[ CLK: {:%H.%M <span size='8pt'> %a %b %d</span>} ]";
tooltip = false; tooltip-format = "<tt>{calendar}";
calendar = {
mode = "month";
weeks-pos = "";
on-scroll = 1;
format = {
months = "<span size = '16pt'><b>CAL: {}\n</b></span>";
days = "<span size = '16pt'><b>{}</b></span>";
weeks = "<span size = '16pt'><b>{}</b></span>";
weekdays = "<span size = '16pt'><b>{}</b></span>";
today = "<span color='#E6E1CF'><b>{}</b></span>";
}; };
}; };
sideBar = { actions = {
layer = "bottom"; on-scroll-up = "shift_down";
output = builtins.elemAt monitors 0; on-scroll-down = "shift_up";
position = "right"; };
margin-top = 8;
margin-right = 5;
margin-bottom = 8;
name = "sideBar";
mode = "dock";
"gtk-layer-shell" = true;
modules-left = if desktop then
[ "hyprland/workspaces" ]
else [
"group/brightness"
"battery"
];
modules-center = [ ];
modules-right = [ "network" "group/audio" ];
"hyprland/workspaces" = workspaces;
"pulseaudio/slider" = { orientation = "vertical"; };
"group/audio" = {
orientation = "vertical";
modules = [ "pulseaudio/slider" "pulseaudio" ];
}; };
pulseaudio = { pulseaudio = {
format = "{icon}"; format = "VOL: [ <span color='#272D38'>{icon}</span> ] <span size='8pt'>{volume}%</span>";
format-muted = " "; tooltip = true;
format-icons = { default = [ " " " " ]; }; tooltip-format = "DEVICE: {desc}";
on-click = "pactl set-sink-mute @DEFAULT_SINK@ toggle"; format-muted = "VOL: <span color='#F07178'>[ XXXXXXXX ] <span size='8pt'>{volume}%</span></span>";
on-click-right = on-click = "if [ $(pamixer --get-mute) == true ]; then pamixer --unmute; else pamixer --mute; fi";
"hyprctl dispatch exec '[float;size 40% 55%] pavucontrol'"; on-scroll-up = "pamixer -i 2";
on-scroll-down = "pamixer -d 2";
scroll-step = 2;
reverse-scrolling = true;
format-icons = bar-gauge;
}; };
network = { network = {
interval = 30; format-wifi = "[ <span color='#B8CC52'>ONLINE</span> ]";
format-wifi = "󰖩 "; format-ethernet = "[ <span color='#B8CC52'>ONLINE</span> ]";
tooltip-format-wifi = "{essid} ({signalStrength}%)"; tooltip-format-wifi = "ESSID\t: {essid}\nSTRNGTH\t: {signaldBm}\n\nADDRESS\t: {ipaddr}\nGATE\t: {gwaddr}\nMASK\t: {netmask} | {cidr}";
format-ethernet = " "; tooltip-format-ethernet = "IFNAME: {ifname}\nADDRESS: {ipaddr}";
tooltip-format-ethernet = "{ifname}"; format-disconnected = "[ <span color='#F07178'>XXXXXX</span> ]";
format-disconnected = "󰖪 "; on-click = "nm-connection-editor";
tooltip-format-disconnected = "Disconnected";
on-click =
"hyprctl dispatch exec '[float;size 40% 55%] kitty nmtui'";
}; };
battery = { memory = {
bat = "BAT1"; interval = 20;
format = "MEM: [ <span color='#272D38'>{icon}</span> ] <span size='8pt'>{percentage}%</span>";
tooltip-format = "MEM_TOT\t: {total}GiB\nSWP_TOT\t: {swapTotal}GiB\n\nMEM_USD\t: {used:0.1f}GiB\nSWP_USD\t: {swapUsed:0.1f}GiB";
format-icons = [
""
""
""
""
""
""
""
"<span color='#F07178'>!!!!!!!!</span>"
"<span color='#F07178'>CRITICAL</span>"
];
};
cpu = {
interval = 1; interval = 1;
tooltip-format = '' format = "CPU: [ <span color='#272D38'>{icon}</span> ] <span size='8pt'>{usage}%</span>";
{capacity}% tooltip = true;
Til empty: {time}''; format-icons = [
tooltip-format-charging = '' ""
{capacity}% ""
Til full: {time}''; ""
format = "{icon}"; ""
format-icons = battery-gauge; ""
format-charging = "󰂄"; ""
}; ""
"<span color='#272D38'>!!!!!!!!</span>"
"group/brightness" = { "<span color='#272D38'>CRITICAL</span>"
orientation = "vertical"; ];
modules = [ "backlight" "backlight/slider" ];
};
backlight = {
format = "󰃠";
tooltip = "{percentage}%";
};
"backlight/slider" = {
min = 10;
max = 100;
orientation = "vertical";
rotate = 180;
}; };
}; };
}; };
style = '' style = ''
* { * {
font-size: 14px;
border: none; border: none;
border-radius: 0; font-familty: EnvyCodeR Nerd Font Mono;
font-size: 16px; font-weight: Bold;
font-family: "JetBrains Mono Nerd Font"; min-height: 0;
border-radius 0px;
padding: 2px;
} }
window#waybar { window#waybar {
border-radius: 10px; color: #${fg.lightest};
border: 3px solid #${fg.light}; background: #${bg.darkester};
background: rgba(23,29,35,0.50);
margin: 20px;
}
window#waybar.empty #window {
background: none;
border: none;
} }
#workspaces { tooltip {
margin: 3px; background: #${bg.darkester};
background: #${bg.darker};
border: 3px solid #${bg.dark};
border-radius: 8px;
} }
#workspaces button:hover { #workspaces button {
border-radius: 8px; color: #${fg.lightest};
background: #${fg.lightest}; background: #${bg.darkester};
color: #${bg.darkest};
} }
#workspaces button.active { #workspaces button.active {
background: #${fg.lightester}; color: #${bg.darker};
border-radius: 8px; background: #${bg.darkester};
color: #${bg.darkest};
} }
#cava { #workspaces button.focused {
background: #${bg.darker}; color: #${bg.dark};
border-radius: 8px; background: #${bg.darkester};
border: 3px solid #${bg.dark}; }
margin: 3px 3px 3px 6px;
padding: 0px 15px 0px 15px; #workspaces button.urgent {
color: #${colors.color6}; color: #${fg.lightest};
background: #${bg.darkester};
}
#workspaces button:hover {
color: #${fg.lightest};
background: #${bg.darkester};
}
#window,
#clock,
#pulseaudio,
#network,
#workspaces,
#tray,
#cpu {
padding: 0px 10px;
margin: 0px;
}
#tray {
margin-right: 10px;
}
#workspaces {
color: #${fg.lightest};
} }
#window { #window {
margin: 3px; color: #${fg.lightest};
background: #${bg.darker};
border-radius: 8px;
border: 3px solid #${bg.dark};
padding: 0 15px 0 15px;
font-weight: bold;
}
#hardware {
margin: 3px;
padding: 0 10px 0 10px;
background: #${bg.darker};
border-radius: 8px;
border: 3px solid #${bg.dark};
}
#custom-disk-icon, #cpu, #memory {
margin-bottom: 4px;
font-size: 20px;
font-weight: bold;
}
#custom-disk-icon {
color: #${colors.color4};
}
#memory {
color: #${colors.color1};
}
#cpu {
color: #${colors.color3};
} }
#clock { #clock {
font-weight: bold; color: #${fg.lightest};
background: #${bg.darker};
border-radius: 8px;
border: 3px solid #${bg.dark};
margin: 3px;
padding: 0 10px 0 10px;
font-size: 18px;
}
#powerbtns {
background: #${bg.darker};
border-radius: 8px;
border: 3px solid #${bg.dark};
margin: 3px;
padding: 0 5px 0 10px;
}
#custom-power {
color: #${colors.color2};
font-size: 18px;
}
#custom-logout {
color: #${colors.color4};
font-size: 18px;
}
#custom-reboot {
color: #${colors.color0};
font-size: 18px;
}
#audio {
background: #${bg.darker};
border-radius: 8px;
border: 3px solid #${bg.dark};
margin: 3px;
padding: 5px 0 10px 0;
}
#pulseaudio {
color: #${colors.color1};
font-size: 18px;
}
#backlight-slider slider,
#pulseaudio-slider slider {
background: #${colors.color4};
background-color: transparent;
box-shadow: none;
}
#backlight-slider trough,
#pulseaudio-slider trough {
min-width: 9px;
min-height: 90px;
border-radius: 8px;
background: #121212;
}
#backlight-slider highlight,
#pulseaudio-slider highlight {
border-radius: 8px;
background-color: #${colors.color4};
} }
#network { #network {
color: #${colors.color1}; color: #${fg.lightest};
font-size: 20px;
background: #${bg.darker};
border-radius: 8px;
border: 3px solid #${bg.dark};
margin: 3px;
padding: 5px 0 5px 6px;
} }
#brightness { #pulseaudio {
background: #${bg.darker}; color: #${fg.lightest};
border-radius: 8px;
border: 3px solid #${bg.dark};
margin: 3px;
padding: 10px 0px 5px 0;
}
#backlight {
color: #${colors.color4};
font-size: 18px;
padding: 0 4px 0 0;
}
#battery {
color: #${colors.color4};
font-size: 20px;
background: #${bg.darker};
border: 3px solid #${bg.dark};
border-radius: 8px;
margin: 3px;
padding: 5px 0 5px 0px;
} }
''; '';
}; };

View File

@@ -6,11 +6,6 @@
config = lib.mkIf config.movOpts.programConfigs.gitConfig.enable { config = lib.mkIf config.movOpts.programConfigs.gitConfig.enable {
programs.git = { programs.git = {
enable = true; enable = true;
signing = {
signer = "${pkgs.gnupg}/bin/gpg";
key = "2453DF4EF63B92D5D8FE8C9DC741C9DFD8156540";
signByDefault = true;
};
userEmail = "kylerclay@proton.me"; userEmail = "kylerclay@proton.me";
userName = "${username}"; userName = "${username}";
extraConfig = { extraConfig = {

View File

@@ -1,3 +1,9 @@
{ env, config, pkgs, host, self, ... }: { { env, config, pkgs, host, self, ... }: {
programs.nixvim.extraPackages = [
pkgs.cargo
pkgs.rustc
pkgs.rustup
pkgs.rust-analyzer
];
imports = [ ./plugins ./options.nix ./keymaps.nix ./autocmd.nix ]; imports = [ ./plugins ./options.nix ./keymaps.nix ./autocmd.nix ];
} }

View File

@@ -3,7 +3,7 @@
keymaps = [ keymaps = [
{ {
action = "<cmd>Telescope find_files<CR>"; # select entire document action = "<cmd>Telescope find_files<CR>"; # select entire document
key = "!fs"; key = "<F3>";
mode = "n"; mode = "n";
} }
{ {
@@ -46,11 +46,6 @@
key = "<F2>"; key = "<F2>";
mode = [ "n" "t" ]; mode = [ "n" "t" ];
} }
{
action = "<cmd>NvimTreeToggle<CR>";
key = "<F3>";
mode = "n";
}
{ {
action = "<cmd>COQnow<CR>"; action = "<cmd>COQnow<CR>";
key = "!cq"; key = "!cq";

View File

@@ -26,15 +26,17 @@ in {
#}; #};
}; };
enable = true; enable = true;
diagnostic.settings.signs = false; diagnostic.settings = {
virtual_text = true;
signs = false;
};
extraConfigLua = '' extraConfigLua = ''
if vim.g.started_by_firenvim == true then if vim.g.started_by_firenvim == true then
vim.o.laststatus = 0 vim.o.laststatus = 0
end end
if vim.g.neovide then if vim.g.neovide then
vim.g.neovide_refresh_rate = 144 vim.g.neovide_refresh_rate = 144
vim.g.neovide_cursor_vfx_mode = "sonicboom" vim.g.neovide_cursor_animate_in_insert_mode = true
vim.g.neovide_cursor_animate_in_insert_mode = false
end end
vim.g.vimwiki_list = {{path = '~/vimwiki/', syntax = 'markdown', ext = '.md'}} vim.g.vimwiki_list = {{path = '~/vimwiki/', syntax = 'markdown', ext = '.md'}}

View File

@@ -2,8 +2,19 @@
programs.nixvim = { programs.nixvim = {
plugins.cmp = { plugins.cmp = {
autoEnableSources = true; autoEnableSources = true;
settings.sources = settings = {
[ { name = "nvim_lsp"; } { name = "path"; } { name = "buffer"; } ]; sources = [
{
name = "nvim_lsp";
}
{
name = "path";
}
{
name = "buffer";
}
];
};
}; };
plugins.cmp-nvim-lsp.enable = true; plugins.cmp-nvim-lsp.enable = true;
plugins.cmp-nvim-lsp-document-symbol.enable = true; plugins.cmp-nvim-lsp-document-symbol.enable = true;

View File

@@ -0,0 +1,10 @@
{
programs.nixvim.plugins.copilot-lua = {
enable = true;
settings = {
suggestion = {
auto_trigger = false;
};
};
};
}

View File

@@ -16,6 +16,7 @@
./airline.nix ./airline.nix
./nvim-lightbulb.nix ./nvim-lightbulb.nix
./neocord.nix ./neocord.nix
./copilot.nix
./plugins.nix ./plugins.nix
./nvim-tree.nix ./nvim-tree.nix
./telescope.nix ./telescope.nix

View File

@@ -13,28 +13,51 @@
['<C-j>'] = cmp.mapping.scroll_docs(-4), ['<C-j>'] = cmp.mapping.scroll_docs(-4),
['<C-k>'] = cmp.mapping.scroll_docs(4), ['<C-k>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(), ['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.abort(), ['<C-Enter>'] = function()
local copilot = require("copilot.suggestion")
cmp.abort()
copilot.next()
end,
['<CR>'] = function(fallback) ['<CR>'] = function(fallback)
if cmp.visible() then if cmp.visible() then
cmp.confirm() cmp.confirm()
else else
fallback() fallback()
end end
end, -- Added a comma here end,
['<Tab>'] = function(fallback) ['<Tab>'] = function(fallback)
local copilot = require("copilot.suggestion")
if cmp.visible() then if cmp.visible() then
cmp.select_next_item() cmp.select_next_item()
elseif copilot.is_visible() then
cmp.abort()
copilot.accept()
else else
fallback() fallback()
end end
end, -- Added a comma here end,
['<S-Tab>'] = function(fallback) ['<A-Tab>'] = function(fallback)
local copilot = require("copilot.suggestion")
if cmp.visible() then if cmp.visible() then
cmp.select_prev_item() cmp.select_prev_item()
elseif copilot.is_visible() then
cmp.abort()
copilot.accept_word()
else else
fallback() fallback()
end end
end -- No comma needed for the last item end,
['<S-Tab>'] = function(fallback)
local copilot = require("copilot.suggestion")
if cmp.visible() then
cmp.select_prev_item()
elseif copilot.is_visible() then
cmp.abort()
copilot.accept_line()
else
fallback()
end
end
}) })
''; '';
}; };

View File

@@ -11,6 +11,7 @@
"192.168.1.200" = [ "xenon" ]; "192.168.1.200" = [ "xenon" ];
"192.168.1.201" = [ "oganesson" ]; "192.168.1.201" = [ "oganesson" ];
"192.168.1.202" = [ "mercury" ]; "192.168.1.202" = [ "mercury" ];
"192.168.1.134" = [ "hosting.localhost" ];
}; };
firewall = { firewall = {
enable = true; enable = true;

View File

@@ -9,6 +9,9 @@ let
"-DDOWNLOAD_TITLE_SEQUENCES=ON" "-DDOWNLOAD_TITLE_SEQUENCES=ON"
]; ];
}); });
cust-prismlauncher = pkgs.prismlauncher.override (oldAttrs: {
jdks = [ pkgs.temurin-bin-21 ];
});
in { in {
options = { options = {
movOpts.softwareCfg.gamingPkgs.enable = movOpts.softwareCfg.gamingPkgs.enable =
@@ -19,8 +22,7 @@ in {
#snes9x-gtk #snes9x-gtk
#cust-openrct2 #cust-openrct2
mgba mgba
dwarf-fortress-packages.dwarf-fortress-full cust-prismlauncher
prismlauncher
]; ];
}; };
} }

View File

@@ -20,6 +20,7 @@
hyprpaper hyprpaper
hyprpicker hyprpicker
inetutils inetutils
rcon-cli
kitty kitty
lolcat lolcat
lsof lsof

View File

@@ -1,7 +1,7 @@
{ pkgs, self, lib, config, ... }: { pkgs, self, lib, config, ... }:
let let
scheme = "chalk"; scheme = "ayu-dark";
wallpaper = "${self}/assets/wallpapers/dark-waves.jpg"; wallpaper = "${self}/assets/wallpapers/dark-waves.jpg";
in { in {
options = { options = {