nixos/nate-work/modules/home-manager/home.nix

922 lines
24 KiB
Nix

{
inputs,
config,
pkgs,
lib,
...
}:
let
userName = "nate";
fullName = "Nate Anderson";
email = "nate.anderson@vasion.com";
unstable = import inputs.nixpkgs-unstable {
system = "x86_64-linux";
config.allowUnfree = true;
};
in
{
imports = [
../../../shared/modules/apps/firefox/firefox.nix
../../../shared/modules/apps/ghostty.nix
../../../shared/modules/apps/helix.nix
../../../shared/modules/home-manager/programs.nix
../../../shared/modules/home-manager/git-autosync.nix
../../../shared/modules/home-manager/noctalia.nix
../../../shared/modules/home-manager/json2nix.nix
../../../shared/modules/home-manager/style-preview.nix
../niri/niri_home.nix
../vpn-proxy/vpn-proxy.nix
];
home.username = userName;
home.homeDirectory = "/home/${userName}";
programs.home-manager.enable = true;
home.stateVersion = "23.11"; # Please read the comment before changing.
# Stylix auto-theming - applies to all programs.<name>.enable apps
stylix.autoEnable = true;
# Enable shared modules
firefoxApp.enable = true;
ghosttyApp.enable = true;
helixApp.enable = true;
sharedPrograms.enable = true;
stylePreview.enable = true;
json2nix.enable = true;
fonts.fontconfig.enable = true;
# OpenCode with Stylix theming (using unstable package)
programs.opencode = {
enable = true;
package = unstable.opencode;
};
# Enable VPN proxy script
vpnProxy.enable = true;
# Git autosync for star-command
services.git-autosync = {
enable = true;
repos.star-command = {
path = "/home/${userName}/source/star-command";
gitName = fullName;
gitEmail = email;
};
};
nirihome = {
enable = true;
homePackages = [ ];
};
# Additional user packages
# Note: Programs with Stylix theming are in shared modules
home.packages = with pkgs; [
#
# Dev Tools
#
vscode-fhs
unstable.docker_25
docker-compose
jq
gnumake
mariadb
cmake
gcc
oxker # docker desktop tui <3
python3
## nodejs frontend
nodejs_24
husky
pnpm
yarn
## dev services cli
gh
awscli2
## AI
unstable.claude-code
## Go stuff
go
unstable.delve
gotools
go-tools
govulncheck
unstable.golangci-lint
go-swag
trivy
### LSP's
gopls
nil
typescript-language-server
nodePackages_latest.bash-language-server
openscad-lsp
vscode-langservers-extracted # provides eslint, markdown, json, css, and html lsp
yaml-language-server
ltex-ls
### Misc
usbutils
nfs-utils
#
# Unix tools
#
duf
dust
fd
lsd
lsof
ripgrep
tre-command
gtop
htop
neofetch
unzip
nmap
#
# Photo / Video
#
imv
ffmpeg
audacity
yt-dlp
simple-scan
# iphone connections
libimobiledevice
ifuse
#
# Communication
#
mumble
#
# Other
#
chromium
keepassxc
obs-studio
gnome-disk-utility
hugo
#
# Style (Qt plugin for Stylix)
#
libsForQt5.qtstyleplugin-kvantum
libsForQt5.qt5ct
# Additional fonts (main fonts managed by Stylix)
unstable.nerd-fonts.hurmit
unstable.nerd-fonts.overpass
unstable.nerd-fonts.monaspace
monaspace
];
# enable saving ssh secrets (needed for go mod installing private packages)
services.gnome-keyring.enable = true;
services.gnome-keyring.components = [
"ssh"
"secrets"
];
# Enable bluetooth headphone controls
services.mpris-proxy.enable = true;
home.sessionVariables = {
EDITOR = "hx";
# For electron apps
NIXOS_OZONE_WL = "1";
};
# Git setup
programs.git = {
enable = true;
settings = {
user.name = fullName;
user.email = email;
init = {
defaultBranch = "main";
};
merge = {
conflictStyle = "zdiff3";
};
pull = {
ff = "only";
};
push = {
autoSetupRemote = "true";
};
# Vasion rewrite rule
url = {
"git@github.com:" = {
insteadOf = "https://github.com/";
};
};
};
};
# Better git diffs with delta
programs.delta = {
enable = true;
enableGitIntegration = true;
options = {
side-by-side = true;
hyperlinks = true;
};
};
# direnv for auto nix flake shells
programs = {
direnv = {
enable = true;
enableZshIntegration = true;
nix-direnv.enable = true;
};
bash.enable = true;
};
# Zsh setup
programs.zsh = {
enable = true;
oh-my-zsh = {
enable = true;
plugins = [ "git" ];
theme = "half-life";
};
initContent = ''
# integrate ssh-agent from gnome keyring
export SSH_AUTH_SOCK=/run/user/$UID/gcr/ssh
# direnv setup
eval "$(direnv hook zsh)"
# History
HISTSIZE=10000
SAVEHIST=10000
setopt SHARE_HISTORY
setopt APPEND_HISTORY
# Work envs
source ~/.vasion_env
# bonus functions
source ~/.config/zsh_functions.zsh
export GOBIN=~/go/bin
export PATH=$PATH:$GOBIN
export NIX_SHELL=/usr/bin/env zsh
claudew() {
export ANTHROPIC_MODEL=us.anthropic.claude-sonnet-4-20250514-v1:0
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_REGION=us-west-2
export CLAUDE_CONFIG_DIR=/home/nate/.claude-work
claude
}
claudep() {
unset ANTHROPIC_MODEL
unset CLAUDE_CODE_USE_BEDROCK
unset AWS_REGION
export CLAUDE_CONFIG_DIR=/home/nate/.claude-personal
claude
}
'';
shellAliases = {
ls = "lsd";
l = "lsd --almost-all --long";
llm = "lsd --timesort --long";
lS = "lsd --oneline --classic";
lt = "lsd --tree --depth=2";
cat = "bat --paging=never";
ccat = "cat";
catp = "bat --paging=never -p";
rm = "rm -i";
};
syntaxHighlighting = {
enable = true;
};
};
# Stylix handles Qt and GTK theming
home.file = lib.mkMerge [
# Shared dotfiles
(
let
sharedDotfilesPath = ../../../shared/dotfiles;
in
if builtins.pathExists sharedDotfilesPath then
builtins.listToAttrs (
map (name: {
name = ".config/${name}";
value = {
source = lib.mkDefault (sharedDotfilesPath + "/${name}");
};
}) (builtins.attrNames (builtins.readDir sharedDotfilesPath))
)
else
{ }
)
# Add local dotfiles, overriding from local over shared
(
let
localDotfilesPath = ../../dotfiles;
in
if builtins.pathExists localDotfilesPath && builtins.readDir localDotfilesPath != { } then
builtins.listToAttrs (
map (name: {
name = ".config/${name}";
value = {
source = localDotfilesPath + "/${name}";
};
}) (builtins.attrNames (builtins.readDir localDotfilesPath))
)
else
{ }
)
];
xdg.configFile = {
# Active linked dotfiles
"hypr".source =
config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/nate-work/linked-dotfiles/hypr";
"niri".source =
config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/nate-work/linked-dotfiles/niri";
# waybar is now managed by shared/modules/home-manager/waybar.nix via waybarConfig.enable
};
# Enable Noctalia shell (replaces Waybar, SwayNC, SwayOSD, wlsunset)
noctaliaShell = {
enable = true;
settings = {
settingsVersion = 51;
bar = {
barType = "simple";
position = "top";
monitors = [ ];
density = "spacious";
showOutline = false;
showCapsule = true;
capsuleOpacity = 1.0;
capsuleColorKey = "none";
backgroundOpacity = 1.0;
useSeparateOpacity = false;
floating = false;
marginVertical = 4;
marginHorizontal = 4;
frameThickness = 8;
frameRadius = 12;
outerCorners = true;
hideOnOverview = false;
displayMode = "always_visible";
autoHideDelay = 500;
autoShowDelay = 150;
widgets = {
left = [
{
icon = "rocket";
iconColor = "none";
id = "Launcher";
}
{
clockColor = "none";
customFont = "";
formatHorizontal = "HH:mm ddd, MMM dd";
formatVertical = "HH mm - dd MM";
id = "Clock";
tooltipFormat = "HH:mm ddd, MMM dd";
useCustomFont = false;
}
{ id = "plugin:weekly-calendar"; }
{
compactMode = true;
diskPath = "/";
iconColor = "none";
id = "SystemMonitor";
showCpuFreq = false;
showCpuTemp = true;
showCpuUsage = true;
showDiskAvailable = false;
showDiskUsage = false;
showDiskUsageAsPercent = false;
showGpuTemp = false;
showLoadAverage = false;
showMemoryAsPercent = false;
showMemoryUsage = true;
showNetworkStats = false;
showSwapUsage = false;
textColor = "none";
useMonospaceFont = true;
}
{
colorizeIcons = false;
hideMode = "hidden";
id = "ActiveWindow";
maxWidth = 145;
scrollingMode = "hover";
showIcon = true;
textColor = "none";
useFixedWidth = false;
}
{
compactMode = false;
compactShowAlbumArt = true;
compactShowVisualizer = false;
hideMode = "hidden";
hideWhenIdle = false;
id = "MediaMini";
maxWidth = 145;
panelShowAlbumArt = true;
panelShowVisualizer = true;
scrollingMode = "hover";
showAlbumArt = true;
showArtistFirst = true;
showProgressRing = true;
showVisualizer = false;
textColor = "none";
useFixedWidth = false;
visualizerType = "linear";
}
{
defaultSettings = {
refreshInterval = 5000;
};
id = "plugin:mini-docker";
}
];
center = [
{
characterCount = 2;
colorizeIcons = false;
emptyColor = "secondary";
enableScrollWheel = true;
focusedColor = "primary";
followFocusedScreen = false;
groupedBorderOpacity = 1.0;
hideUnoccupied = false;
iconScale = 0.8;
id = "Workspace";
labelMode = "index";
occupiedColor = "secondary";
pillSize = 0.6;
reverseScroll = false;
showApplications = false;
showBadge = true;
showLabelsOnlyWhenOccupied = true;
unfocusedIconsOpacity = 1.0;
}
];
right = [
{
blacklist = [ ];
chevronColor = "none";
colorizeIcons = false;
drawerEnabled = true;
hidePassive = false;
id = "Tray";
pinned = [ ];
}
{
hideWhenZero = false;
hideWhenZeroUnread = false;
iconColor = "none";
id = "NotificationHistory";
showUnreadBadge = true;
unreadBadgeColor = "primary";
}
{
deviceNativePath = "__default__";
displayMode = "graphic-clean";
hideIfIdle = false;
hideIfNotDetected = true;
id = "Battery";
showNoctaliaPerformance = false;
showPowerProfiles = false;
}
{
displayMode = "onhover";
iconColor = "none";
id = "Volume";
middleClickCommand = "pwvucontrol || pavucontrol";
textColor = "none";
}
{
displayMode = "onhover";
iconColor = "none";
id = "Brightness";
textColor = "none";
}
{
colorizeDistroLogo = false;
colorizeSystemIcon = "none";
customIconPath = "";
enableColorization = false;
icon = "noctalia";
id = "ControlCenter";
useDistroLogo = false;
}
];
};
screenOverrides = [ ];
};
general = {
avatarImage = "/home/${userName}/.face";
dimmerOpacity = 0.1;
showScreenCorners = false;
forceBlackScreenCorners = false;
scaleRatio = 1.1;
radiusRatio = 1;
iRadiusRatio = 1;
boxRadiusRatio = 1;
screenRadiusRatio = 1;
animationSpeed = 1;
animationDisabled = false;
compactLockScreen = false;
lockScreenAnimations = false;
lockOnSuspend = true;
showSessionButtonsOnLockScreen = true;
showHibernateOnLockScreen = false;
enableShadows = true;
shadowDirection = "bottom_right";
shadowOffsetX = 2;
shadowOffsetY = 3;
language = "";
allowPanelsOnScreenWithoutBar = true;
showChangelogOnStartup = true;
telemetryEnabled = false;
enableLockScreenCountdown = true;
lockScreenCountdownDuration = 10000;
autoStartAuth = false;
allowPasswordWithFprintd = false;
clockStyle = "custom";
clockFormat = "hh\\nmm";
lockScreenMonitors = [ ];
lockScreenBlur = 0;
lockScreenTint = 0;
keybinds = {
keyUp = [ "Up" ];
keyDown = [ "Down" ];
keyLeft = [ "Left" ];
keyRight = [ "Right" ];
keyEnter = [ "Return" ];
keyEscape = [ "Esc" ];
};
};
ui = {
fontDefault = "Lato";
fontFixed = "Maple Mono NF";
fontDefaultScale = 1.25;
fontFixedScale = 1;
tooltipsEnabled = true;
panelBackgroundOpacity = 1.0;
panelsAttachedToBar = true;
settingsPanelMode = "attached";
wifiDetailsViewMode = "grid";
bluetoothDetailsViewMode = "grid";
networkPanelView = "wifi";
bluetoothHideUnnamedDevices = false;
boxBorderEnabled = false;
};
location = {
name = "Saratoga Springs, UT";
weatherEnabled = true;
weatherShowEffects = true;
useFahrenheit = true;
use12hourFormat = true;
showWeekNumberInCalendar = false;
showCalendarEvents = true;
showCalendarWeather = true;
analogClockInCalendar = false;
firstDayOfWeek = -1;
hideWeatherTimezone = false;
hideWeatherCityName = false;
};
calendar = {
cards = [
{
enabled = true;
id = "calendar-header-card";
}
{
enabled = true;
id = "calendar-month-card";
}
{
enabled = true;
id = "weather-card";
}
];
};
wallpaper = {
enabled = true;
overviewEnabled = false;
directory = "/home/${userName}/Pictures/Wallpapers";
monitorDirectories = [ ];
enableMultiMonitorDirectories = false;
showHiddenFiles = false;
viewMode = "single";
setWallpaperOnAllMonitors = true;
fillMode = "crop";
fillColor = "#000000";
useSolidColor = false;
solidColor = "#1a1a2e";
automationEnabled = false;
wallpaperChangeMode = "random";
randomIntervalSec = 300;
transitionDuration = 1500;
transitionType = "random";
transitionEdgeSmoothness = 0.05;
panelPosition = "follow_bar";
hideWallpaperFilenames = false;
overviewBlur = 0.4;
overviewTint = 0.6;
useWallhaven = false;
wallhavenQuery = "";
wallhavenSorting = "relevance";
wallhavenOrder = "desc";
wallhavenCategories = "111";
wallhavenPurity = "100";
wallhavenRatios = "";
wallhavenApiKey = "";
wallhavenResolutionMode = "atleast";
wallhavenResolutionWidth = "";
wallhavenResolutionHeight = "";
sortOrder = "name";
};
appLauncher = {
enableClipboardHistory = false;
autoPasteClipboard = false;
enableClipPreview = true;
clipboardWrapText = true;
clipboardWatchTextCommand = "wl-paste --type text --watch cliphist store";
clipboardWatchImageCommand = "wl-paste --type image --watch cliphist store";
position = "center";
pinnedApps = [ ];
useApp2Unit = false;
sortByMostUsed = true;
terminalCommand = "ghostty -e";
customLaunchPrefixEnabled = false;
customLaunchPrefix = "";
viewMode = "list";
showCategories = true;
iconMode = "tabler";
showIconBackground = false;
enableSettingsSearch = true;
enableWindowsSearch = true;
ignoreMouseInput = false;
screenshotAnnotationTool = "";
overviewLayer = false;
density = "default";
};
controlCenter = {
position = "close_to_bar_button";
diskPath = "/";
shortcuts = {
left = [
{ id = "Network"; }
{ id = "Bluetooth"; }
{ id = "WallpaperSelector"; }
{ id = "NoctaliaPerformance"; }
];
right = [
{ id = "Notifications"; }
{ id = "PowerProfile"; }
{ id = "KeepAwake"; }
{ id = "NightLight"; }
];
};
cards = [
{
enabled = true;
id = "profile-card";
}
{
enabled = true;
id = "shortcuts-card";
}
{
enabled = true;
id = "audio-card";
}
{
enabled = false;
id = "brightness-card";
}
{
enabled = true;
id = "weather-card";
}
{
enabled = true;
id = "media-sysmon-card";
}
];
};
systemMonitor = {
cpuWarningThreshold = 80;
cpuCriticalThreshold = 90;
tempWarningThreshold = 80;
tempCriticalThreshold = 90;
gpuWarningThreshold = 80;
gpuCriticalThreshold = 90;
memWarningThreshold = 80;
memCriticalThreshold = 90;
swapWarningThreshold = 80;
swapCriticalThreshold = 90;
diskWarningThreshold = 80;
diskCriticalThreshold = 90;
diskAvailWarningThreshold = 20;
diskAvailCriticalThreshold = 10;
batteryWarningThreshold = 20;
batteryCriticalThreshold = 5;
cpuPollingInterval = 1000;
gpuPollingInterval = 3000;
enableDgpuMonitoring = false;
memPollingInterval = 1000;
diskPollingInterval = 30000;
networkPollingInterval = 1000;
loadAvgPollingInterval = 3000;
useCustomColors = false;
warningColor = "";
criticalColor = "";
externalMonitor = "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor";
};
dock = {
enabled = true;
position = "bottom";
displayMode = "auto_hide";
backgroundOpacity = 1.0;
floatingRatio = 1;
size = 1;
onlySameOutput = true;
monitors = [ ];
pinnedApps = [ ];
colorizeIcons = false;
pinnedStatic = false;
inactiveIndicators = false;
deadOpacity = 0.6;
animationSpeed = 1;
};
network = {
wifiEnabled = true;
bluetoothRssiPollingEnabled = false;
bluetoothRssiPollIntervalMs = 10000;
wifiDetailsViewMode = "grid";
bluetoothDetailsViewMode = "grid";
bluetoothHideUnnamedDevices = false;
};
sessionMenu = {
enableCountdown = true;
countdownDuration = 10000;
position = "center";
showHeader = true;
largeButtonsStyle = true;
largeButtonsLayout = "single-row";
showNumberLabels = true;
powerOptions = [
{
action = "lock";
command = "";
countdownEnabled = true;
enabled = true;
keybind = "";
}
{
action = "suspend";
command = "";
countdownEnabled = true;
enabled = true;
keybind = "";
}
{
action = "hibernate";
command = "";
countdownEnabled = true;
enabled = true;
keybind = "";
}
{
action = "reboot";
command = "";
countdownEnabled = true;
enabled = true;
keybind = "";
}
{
action = "logout";
command = "";
countdownEnabled = true;
enabled = true;
keybind = "";
}
{
action = "shutdown";
command = "";
countdownEnabled = true;
enabled = true;
keybind = "";
}
];
};
notifications = {
enabled = true;
monitors = [ ];
location = "top";
overlayLayer = true;
backgroundOpacity = 1.0;
respectExpireTimeout = false;
lowUrgencyDuration = 3;
normalUrgencyDuration = 8;
criticalUrgencyDuration = 15;
saveToHistory = {
low = true;
normal = true;
critical = true;
};
sounds = {
enabled = false;
volume = 0.5;
separateSounds = false;
criticalSoundFile = "";
normalSoundFile = "";
lowSoundFile = "";
excludedApps = "discord,firefox,chrome,chromium,edge";
};
enableMediaToast = false;
enableKeyboardLayoutToast = true;
enableBatteryToast = true;
};
osd = {
enabled = true;
location = "bottom";
autoHideMs = 2000;
overlayLayer = true;
backgroundOpacity = 1.0;
enabledTypes = [
0
1
2
3
];
monitors = [ ];
};
audio = {
volumeStep = 5;
volumeOverdrive = false;
cavaFrameRate = 30;
visualizerType = "linear";
mprisBlacklist = [ ];
preferredPlayer = "";
volumeFeedback = false;
};
brightness = {
brightnessStep = 5;
enforceMinimum = true;
enableDdcSupport = false;
};
colorSchemes = {
useWallpaperColors = false;
predefinedScheme = "Noctalia (default)";
darkMode = true;
schedulingMode = "off";
manualSunrise = "06:30";
manualSunset = "18:30";
generationMethod = "tonal-spot";
monitorForColors = "";
};
templates = {
activeTemplates = [ ];
enableUserTheming = false;
};
nightLight = {
enabled = false;
forced = false;
autoSchedule = true;
nightTemp = "4000";
dayTemp = "6500";
manualSunrise = "06:30";
manualSunset = "18:30";
};
hooks = {
enabled = false;
wallpaperChange = "";
darkModeChange = "";
screenLock = "";
screenUnlock = "";
performanceModeEnabled = "";
performanceModeDisabled = "";
startup = "";
session = "";
};
plugins = {
autoUpdate = false;
};
desktopWidgets = {
enabled = false;
gridSnap = false;
monitorWidgets = [ ];
};
};
};
}