{ email, pkgs, username, stateVersion, inputs, config, lib, ... }: { imports = [ inputs.noctalia.homeModules.default ]; nixpkgs = { config = { allowUnfree = true; permittedInsecurePackages = [ "electron-39.8.10" ]; }; }; home = { username = "${username}"; homeDirectory = "/home/${username}"; preferXdgDirectories = true; stateVersion = stateVersion; packages = with pkgs; [ bitwarden-cli bitwarden-desktop duf dust sd seafile-client stow tealdeer xh ]; }; editorconfig = { enable = true; settings = { "*" = { charset = "utf-8"; end_of_line = "lf"; trim_trailing_whitespace = true; insert_final_newline = false; max_line_width = 80; indent_style = "space"; indent_size = 2; }; }; }; fonts = { fontconfig = { defaultFonts = { emoji = with pkgs; [ nerd-fonts.symbols-only font-awesome ]; monospace = with pkgs; [ nerd-fonts.jetbrains-mono nerd-fonts.hack nerd-fonts.symbols-only ]; sansSerif = [ liberation_ttf_v2 ]; serif = [ liberation_ttf_v2 ]; }; antialiasing = true; hinting = "medium"; subpixelRendering = "rgb"; }; }; programs = { aerc = { enable = true; }; bat = { enable = true; extraPackages = with pkgs.bat-extras; [ batdiff batman batgrep batwatch ]; }; chromium = { enable = true; package = pkgs.ungoogled-chromium; dictionaries = [ pkgs.hunspellDictsChromium.en-gb pkgs.hunspellDictsChromium.en-us pkgs.hunspellDictsChromium.fr-fr ]; }; command-not-found = { enable = true; }; delta = { enable = true; enableGitIntegration = true; options = { decorations = { commit-decoration-style = "bold yellow box ul"; file-decoration-style = "none"; file-style = "bold yellow ul"; }; features = "decorations"; whitespace-error-style = "22 reverse"; }; }; direnv = { enable = true; enableZshIntegration = true; }; eza = { enable = true; enableZshIntegration = true; colors = "auto"; extraOptions = [ "--group-directories-first" "--header" ]; git = true; icons = "always"; }; fd = { enable = true; }; fuzzel = { enable = true; settings = { main = { terminal = "${pkgs.ghostty}/bin/ghostty"; layer = "overlay"; }; }; }; fzf = { enable = true; enableZshIntegration = true; }; ghostty = { enable = true; enableZshIntegration = true; installBatSyntax = true; installVimSyntax = true; settings = { font-family = "JetBrainsMono Nerd Font"; font-size = 13; theme = "sproutingdark"; macos-option-as-alt = true; shell-integration-features = "no-cursor"; cursor-style = "block"; background-opacity = 0.75; }; themes = { sproutingdark = { palette = [ "0=#1f2620" "1=#e04b7c" "2=#9dbf9e" "3=#ccca7a" "4=#5586db" "5=#dc51de" "6=#7ef3ef" "7=#d8e5d8" "8=#3f4c3f" "9=#e8789d" "10=#b1ccb1" "11=#fffd98" "12=#99b6e9" "13=#ea97eb" "14=#b2f8f5" "15=#f5f9f5" ]; background = "1f2620"; foreground = "eaeaea"; cursor-color = "fffd98"; cursor-text = "3f4c3f"; cursor-opacity = 0.7; cursor-style = "block"; selection-background = "3f4c3f"; selection-foreground = "ffffea"; background-opacity = 1; window-padding-x = "2,2"; window-padding-y = "2,2"; window-padding-balance = true; window-height = 25; window-width = 80; }; }; }; git = { enable = true; lfs = { enable = true; }; settings = { user.name = "Matthew Stobbs"; user.email = "${email}"; init.defaultBranch = "main"; }; }; go = { enable = true; env = { GOPRIVATE = [ "git.sprouting.cloud" ]; }; }; gpg = { enable = true; }; home-manager = { enable = true; }; jq = { enable = true; }; lazygit = { enable = true; enableZshIntegration = true; }; librewolf = { enable = true; }; neovide = { enable = true; settings = { wayland-app-id = "neovide"; font = { normal = [ pkgs.nerd-fonts.jetbrains-mono ]; size = 14.0; }; }; }; neovim = { enable = true; initLua = builtins.readFile ../config/nvim/stobbsm/nvim.lua; defaultEditor = true; viAlias = true; vimAlias = true; vimdiffAlias = true; withNodeJs = true; withPerl = true; withPython3 = true; }; # noctalia = { # enable = true; # settings = "${config.xdg.configHome}/dotfiles/niri/.config/niri/full.kdl"; # }; pandoc = { enable = true; }; ripgrep = { enable = true; }; starship = { enable = true; enableZshIntegration = true; settings = { palette = "sproutingdark"; add_newline = true; command_timeout = 2000; format = lib.concatStrings [ "\$username" "[](fg:yellow)\$git_status\$git_branch\$directory" "[](fg:yellow bg:green)" "\$fill" "\$c" "\$golang" "\$nodejs" "\$rust" "\$fill" "[](fg:silver bg:green)\$time[](fg:silver)\n" "\$character" ]; character = { success_symbol = "[ ](bold lime)"; error_symbol = "[ ](bold red)"; }; username = { show_always = false; style_user = "bg:fuchsia fg:black"; style_root = "bg:fuchsia fg:black"; format = "[](fg:fuchsia)[\$user ](\$style)[](fg:fuchsia)"; disabled = false; }; fill = { symbol = " "; style = "bg:green"; }; directory = { style = "bg:yellow fg:black"; format = "[  \$path ](\$style)"; truncation_length = 3; truncation_symbol = "…/"; substitutions = { "~" = ""; "Documents" = "󰈙"; "Downloads" = ""; "Music" = ""; "Pictures" = ""; }; }; time = { disabled = false; time_format = " %F  %T"; style = "bg:silver fg:black"; format = "[ \$time ](\$style)"; }; docker_context = { symbol = " "; style = "bg:fuchsia fg:black"; format = "[ \$symbol \$context ](\$style)"; }; git_branch = { symbol = ""; style = "bg:yellow fg:black"; format = "[ \$symbol \$branch ](\$style)"; }; git_status = { style = "bg:yellow fg:black"; format = "[\$all_status\$ahead_behind ](\$style)"; }; c = { symbol = " "; style = "bg:aqua fg:black"; format = "[](fg:aqua bg:green)[\$symbol (\$version) ](\$style)[](fg:aqua bg:green)"; }; golang = { symbol = " "; style = "bg:aqua fg:black"; format = "[](fg:aqua bg:green)[\$symbol (\$version) ](\$style)[](fg:aqua bg:green)"; }; nodejs = { symbol = " "; style = "bg:aqua fg:black"; format = "[](fg:aqua bg:green)[\$symbol (\$version) ](\$style)[](fg:aqua bg:green)"; }; rust = { symbol = " "; style = "bg:aqua fg:black"; format = "[](fg:aqua bg:green)[\$symbol (\$version) ](\$style)[](fg:aqua bg:green)"; }; palettes = { sproutingdark = { black = "#1f2620"; grey = "#3f4c3f"; maroon = "#e04b7c"; red = "#e8789d"; green = "#9bdf9e"; lime = "#b1ccb1"; olive = "#ccca7a"; yellow = "#fffd98"; navy = "#5586db"; blue = "#99b6e9"; purple = "#dc51de"; fuchsia = "#ea97eb"; teal = "#7ef3ef"; aqua = "#b2f8f5"; silver = "#d8e5d8"; white = "#f5f9f5"; }; sproutinglight = { black = "#3f4c3f"; grey = "#7e997e"; maroon = "#ad1849"; red = "#d81e5b"; green = "#7e997e"; lime = "#9dbf9e"; olive = "#99985b"; yellow = "#ccca7a"; navy = "#779ee2"; blue = "#446baf"; purple = "#843185"; fuchsia = "#b041b2"; teal = "#4c928f"; aqua = "#65c2bf"; silver = "#f5f9f5"; white = "#d8e5d8"; }; }; }; }; tmux = { enable = true; clock24 = true; escapeTime = 10; focusEvents = true; historyLimit = 5000; keyMode = "vi"; mouse = true; newSession = true; terminal = "xterm-256color"; }; uv = { enable = true; }; yazi = { enable = true; enableZshIntegration = true; settings = builtins.readFile ../config/yazi/yazi.toml; theme = builtins.readFile ../config/yazi/themes/sprouting.toml; }; zoxide = { enable = true; enableZshIntegration = true; }; zsh = { enable = true; enableCompletion = true; oh-my-zsh = { enable = true; plugins = [ "aliases" "direnv" "eza" "fzf" "golang" "podman" "starship" "zoxide" ]; theme = "robbyrussell"; extraConfig = '' zstyle ':omz:update' mode reminder ''; }; }; }; wayland = { windowManager = { niri = { enable = true; settings = { layout = { focus-ring = { active-color = "#9bdf9e"; inactive-color = "#7e997e"; urgent-color = "#e04b7c"; }; border = { active-color = "#9bdf9e"; inactive-color = "#7e997e"; urgent-color = "#e04b7c"; }; shadow = { color = "#3f4c3f70"; }; tab-indicator = { active-color = "#9bdf9e"; inactive-color = "#7e997e"; urgent-color = "#e04b7c"; }; insert-hint = { color = "#3f4c3f80"; }; _props.gaps = 16; _props.center-focused-column = "never"; _props.background-color = "transparent"; preset-column-widths = '' proportion = 0.33333 proportion = 0.5 proportion = 0.66667 ''; _props.struts = "{}"; }; recent-windows = { highlight = { _props.active-color = "#b1ccb1"; _props.urgent-color = "#e8789d"; }; }; animations = { workspace-switch = { "spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001" = { }; }; window-open = { duration-ms = 200; curve = "ease-out-quad"; }; window-close = { duration-ms = 200; curve = "ease-out-cubic"; }; horizontal-view-movement = { "spring damping-ratio=1.0 stiffness=900 epsilon=0.0001" = { }; }; window-movement = { "spring damping-ratio=1.0 stiffness=800 epsilon=0.0001" = { }; }; window-resize = { "spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001" = { }; }; config-notification-open-close = { "spring damping-ratio=0.6 stiffness=1200 epsilon=0.001" = { }; }; screenshot-ui-open = { duration-ms = 300; curve = "ease-out-quad"; }; overview-open-close = { "spring damping-ratio=1.0 stiffness=900 epsilon=0.0001" = { }; }; }; input = { keyboard = { xkb = { #layout = "us"; }; }; touchpad = { tap = { }; natural-scroll = { }; }; mouse = { accel-profile = "flat"; accel-speed = 0.0; }; focus-follows-mouse = { }; workspace-auto-back-and-forth = { }; }; binds = { "Mod+Shift+ESCAPE".show-hotkey-overlay = { }; "Mod+Return" = { _props.hotkey-overlay-title = "Open Terminal: Ghostty"; spawn = [ "ghostty" ]; }; "Mod+B" = { _props.hotkey-overlay-title = "Open Browser: firefox"; spawn = [ "firefox" ]; }; "Mod+ALT+L" = { _props.hotkey-overlay-title = "Lock Screen: noctalia lock"; spawn-sh = [ "qs -c noctalia-shell ipc call lockScreen lock" ]; }; "Mod+Shift+Q" = { _props.hotkey-overlay-title = "Session Menu: noctalia sessionMenu"; spawn-sh = [ "qs -c noctalia-shell ipc call sessionMenu toggle" ]; }; "Mod+E" = { _props.hotkey-overlay-title = "File Manager: Nautilus"; spawn = [ "nautilus" ]; }; "XF86AudioRaiseVolume" = { _props.allow-when-locked = true; spawn-sh = [ "qs -c noctalia-shell ipc call volume increase" ]; }; "XF86AudioLowerVolume" = { _props.allow-when-locked = true; spawn-sh = [ "qs -c noctalia-shell ipc call volume decrease" ]; }; "XF86AudioMute" = { _props.allow-when-locked = true; spawn-sh = [ "qs -c noctalia-shell ipc call volume muteOutput" ]; }; "XF86AudioMicMute" = { _props.allow-when-locked = true; spawn-sh = [ "qs -c noctalia-shell ipc call volume muteInput" ]; }; "XF86AudioNext" = { _props.allow-when-locked = true; spawn-sh = [ "qs -c noctalia-shell ipc call media next" ]; }; "XF86AudioPrev" = { _props.allow-when-locked = true; spawn-sh = [ "qs -c noctalia-shell ipc call media previous" ]; }; "XF86AudioPlay" = { _props.allow-when-locked = true; spawn-sh = [ "qs -c noctalia-shell ipc call media playPause" ]; }; "XF86AudioPause" = { _props.allow-when-locked = true; spawn-sh = [ "qs -c noctalia-shell ipc call media playPause" ]; }; "XF86MonBrightnessUp" = { _props.allow-when-locked = true; spawn-sh = [ "qs -c noctalia-shell ipc call brightness increase" ]; }; "XF86MonBrightnessDown" = { _props.allow-when-locked = true; spawn-sh = [ "qs -c noctalia-shell ipc call brightness decrease" ]; }; "Mod+Q".close-window = { }; "Mod+Left".focus-column-left = { }; "Mod+H".focus-column-left = { }; "Mod+Right".focus-column-right = { }; "Mod+L".focus-column-right = { }; "Mod+Up".focus-window-up = { }; "Mod+K".focus-window-up = { }; "Mod+Down".focus-window-down = { }; "Mod+J".focus-window-down = { }; "Mod+CTRL+Left".move-column-left = { }; "Mod+CTRL+H".move-column-left = { }; "Mod+CTRL+Right".move-column-right = { }; "Mod+CTRL+L".move-column-right = { }; "Mod+CTRL+UP".move-window-up = { }; "Mod+CTRL+K".move-window-up = { }; "Mod+CTRL+Down".move-window-down = { }; "Mod+CTRL+J".move-window-down = { }; "Mod+Home".focus-column-first = { }; "Mod+End".focus-column-last = { }; "Mod+CTRL+Home".move-column-to-first = { }; "Mod+CTRL+End".move-column-to-last = { }; "Mod+Shift+Left".focus-monitor-left = { }; "Mod+Shift+Right".focus-monitor-right = { }; "Mod+Shift+UP".focus-monitor-up = { }; "Mod+Shift+Down".focus-monitor-down = { }; "Mod+Shift+CTRL+Left".move-column-to-monitor-left = { }; "Mod+Shift+CTRL+Right".move-column-to-monitor-right = { }; "Mod+Shift+CTRL+UP".move-column-to-monitor-up = { }; "Mod+Shift+CTRL+Down".move-column-to-monitor-down = { }; "Mod+Next" = { _props.cooldown-ms = 150; _props.focus-workspace-down = { }; }; "Mod+Prior" = { _props.cooldown-ms = 150; _props.focus-workspace-up = { }; }; "Mod+CTRL+Next" = { _props.cooldown-ms = 150; _props.move-column-to-workspace-down = { }; }; "Mod+CTRL+Prior" = { _props.cooldown-ms = 150; _props.move-column-to-workspace-up = { }; }; "Mod+WheelScrollRight".focus-column-right = { }; "Mod+WheelScrollLeft".focus-column-left = { }; "Mod+CTRL+WheelScrollRight".move-column-right = { }; "Mod+CTRL+WheelScrollLeft".move-column-left = { }; "Mod+Shift+WheelScrollDown".focus-column-right = { }; "Mod+Shift+WheelScrollUp".focus-column-left = { }; "Mod+CTRL+Shift+WheelScrollDown".move-column-right = { }; "Mod+CTRL+Shift+WheelScrollUp".move-column-left = { }; "Mod+1".focus-workspace = 1; "Mod+2".focus-workspace = 2; "Mod+3".focus-workspace = 3; "Mod+4".focus-workspace = 4; "Mod+5".focus-workspace = 5; "Mod+6".focus-workspace = 6; "Mod+7".focus-workspace = 7; "Mod+8".focus-workspace = 8; "Mod+9".focus-workspace = 9; "Mod+CTRL+1".move-column-to-workspace = 1; "Mod+CTRL+2".move-column-to-workspace = 2; "Mod+CTRL+3".move-column-to-workspace = 3; "Mod+CTRL+4".move-column-to-workspace = 4; "Mod+CTRL+5".move-column-to-workspace = 5; "Mod+CTRL+6".move-column-to-workspace = 6; "Mod+CTRL+7".move-column-to-workspace = 7; "Mod+CTRL+8".move-column-to-workspace = 8; "Mod+CTRL+9".move-column-to-workspace = 9; "Mod+TAB".focus-workspace-previous = { }; "Mod+CTRL+F".expand-column-to-available-width = { }; "Mod+C".center-column = { }; "Mod+CTRL+C".center-visible-columns = { }; "Mod+Minus".set-column-width = "-10%"; "Mod+Equal".set-column-width = "+10%"; "Mod+Shift+Minus".set-window-height = "-10%"; "Mod+Shift+Equal".set-window-height = "+10%"; "Mod+T".toggle-window-floating = { }; "Mod+F".fullscreen-window = { }; "Mod+W".toggle-column-tabbed-display = { }; "CTRL+Shift+1".screenshot = { }; "CTRL+Shift+2".screenshot-screen = { }; "CTRL+Shift+3".screenshot-window = { }; "Mod+ESCAPE" = { allow-inhibiting = false; toggle-keyboard-shortcuts-inhibit = { }; }; "CTRL+ALT+Delete".quit = { }; "Mod+Shift+P".power-off-monitors = { }; "Mod+O" = { repeat = false; toggle-overview = { }; }; }; _props.prefer-no-csd = { }; screenshot-path = "null"; environment = { ELECTRON_OZONE_PLATFORM_HINT = "auto"; QT_QPA_PLATFORM = "wayland"; QT_QPA_PLATFORMTHEME = "gtk3"; QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; XDG_CURRENT_DESKTOP = "niri"; XDG_SESSION_TYPE = "wayland"; }; cursor = { xcursor-theme = "capitaine-cursors"; xcursor-size = 24; }; debug = { _props.honor-xdg-activation-with-invalid-serial = { }; }; hotkey-overlay = { _props.skip-at-startup = { }; }; window-rule = { _props.geometry-corner-radius = 20; clip-to-geometry = true; }; window-rule = { match = "app-id=\"steam\""; exclude = "title=r#\"^[Ss]team$\"#"; open-floating = true; }; window-rule = { match = "app-id=\"steam\" title=r#\"^notificationtoasts_\d+_desktop$\"#"; default-floating-position = "x=10 y=10 relative-to=\"bottom-right\""; open-focused = false; }; layer-rule = { match = "namespace=\"^noctalia-wallpaper*\""; place-within-backdrop = true; }; }; systemd = { enable = true; }; }; }; }; }