Update nate-work config with new dotfiles linking strat
This commit is contained in:
		
							parent
							
								
									18afdc0fb6
								
							
						
					
					
						commit
						a0857002d6
					
				
							
								
								
									
										34
									
								
								AGENTS.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								AGENTS.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# AGENTS.md - NixOS Configuration Repository
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Build/Test Commands
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					# Validate configuration syntax
 | 
				
			||||||
 | 
					nix flake check
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Dry-run build for specific host (test without building)
 | 
				
			||||||
 | 
					nix build .#nixosConfigurations.<hostname>.config.system.build.toplevel --dry-run
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Test configuration without switching
 | 
				
			||||||
 | 
					sudo nixos-rebuild test --flake .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Apply configuration changes
 | 
				
			||||||
 | 
					sudo nixos-rebuild switch --flake .#<hostname>
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Code Style Guidelines
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Language**: Nix expression language
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Formatting**: Use 2-4 space indentation (varies by file), no tabs except in some user modules
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Imports**: Always import required modules at top: `{ config, lib, pkgs, ... }:` or with additional args like `inputs, outputs, system, timeZone`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Naming**: Use camelCase for options (`userName`, `hostName`, `isDesktopUser`), kebab-case for hostnames, underscores for module names (`main_user`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Module Pattern**: Define options with `lib.mkOption`, use `lib.mkIf` for conditional config, use `lib.mkMerge` for combining attribute sets
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Error Handling**: Rely on Nix's built-in evaluation errors; use `lib.mkEnableOption` for optional features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Types**: Specify types in options: `lib.types.str`, `lib.types.bool`, provide defaults and descriptions for all options
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Comments**: Minimal comments; prefer self-documenting option descriptions; hardware files auto-generated with warnings at top
 | 
				
			||||||
							
								
								
									
										12
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										12
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							@ -98,11 +98,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs-unstable": {
 | 
					    "nixpkgs-unstable": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1759831965,
 | 
					        "lastModified": 1760524057,
 | 
				
			||||||
        "narHash": "sha256-vgPm2xjOmKdZ0xKA6yLXPJpjOtQPHfaZDRtH+47XEBo=",
 | 
					        "narHash": "sha256-EVAqOteLBFmd7pKkb0+FIUyzTF61VKi7YmvP1tw4nEw=",
 | 
				
			||||||
        "owner": "nixos",
 | 
					        "owner": "nixos",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "c9b6fb798541223bbb396d287d16f43520250518",
 | 
					        "rev": "544961dfcce86422ba200ed9a0b00dd4b1486ec5",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@ -114,11 +114,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs_2": {
 | 
					    "nixpkgs_2": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1759735786,
 | 
					        "lastModified": 1760423683,
 | 
				
			||||||
        "narHash": "sha256-a0+h02lyP2KwSNrZz4wLJTu9ikujNsTWIC874Bv7IJ0=",
 | 
					        "narHash": "sha256-Tb+NYuJhWZieDZUxN6PgglB16yuqBYQeMJyYBGCXlt8=",
 | 
				
			||||||
        "owner": "nixos",
 | 
					        "owner": "nixos",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "20c4598c84a671783f741e02bf05cbfaf4907cff",
 | 
					        "rev": "a493e93b4a259cd9fea8073f89a7ed9b1c5a1da2",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
 | 
				
			|||||||
@ -138,7 +138,7 @@
 | 
				
			|||||||
      if builtins.pathExists sharedDotfilesPath then
 | 
					      if builtins.pathExists sharedDotfilesPath then
 | 
				
			||||||
        builtins.listToAttrs (map (name: {
 | 
					        builtins.listToAttrs (map (name: {
 | 
				
			||||||
          name = "${config.xdg.configHome}/${name}";
 | 
					          name = "${config.xdg.configHome}/${name}";
 | 
				
			||||||
          value = { source = sharedDotfilesPath + "/${name}"; };
 | 
					          value = { source = lib.mkDefault (sharedDotfilesPath + "/${name}"); };
 | 
				
			||||||
        }) (builtins.attrNames (builtins.readDir sharedDotfilesPath)))
 | 
					        }) (builtins.attrNames (builtins.readDir sharedDotfilesPath)))
 | 
				
			||||||
      else {})
 | 
					      else {})
 | 
				
			||||||
    # Add local dotfiles, overriding from local over shared
 | 
					    # Add local dotfiles, overriding from local over shared
 | 
				
			||||||
@ -161,8 +161,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  # Active symlinks
 | 
					  # Active symlinks
 | 
				
			||||||
  xdg.configFile = {
 | 
					  xdg.configFile = {
 | 
				
			||||||
    "niri".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/frame12/linked-dotfiles/niri";
 | 
					    # Active linked dotfiles
 | 
				
			||||||
 | 
					    "niri".source =   config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/frame12/linked-dotfiles/niri";
 | 
				
			||||||
    "waybar".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/frame12/linked-dotfiles/waybar";
 | 
					    "waybar".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/frame12/linked-dotfiles/waybar";
 | 
				
			||||||
 | 
					    # Shared
 | 
				
			||||||
    "helix".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/shared/linked-dotfiles/helix";
 | 
					    "helix".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/shared/linked-dotfiles/helix";
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    # Theme configuration
 | 
					    # Theme configuration
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										25
									
								
								nate-work/dotfiles/kanshi/config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								nate-work/dotfiles/kanshi/config
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					# Kanshi configuration for nate-work
 | 
				
			||||||
 | 
					# Automatic display configuration based on connected monitors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Profile: Laptop only (no external monitors)
 | 
				
			||||||
 | 
					profile laptop-only {
 | 
				
			||||||
 | 
					    output eDP-1 mode 2560x1600@165Hz position 0,0 scale 1.00
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Profile: Laptop + LG ULTRAGEAR+
 | 
				
			||||||
 | 
					profile lg-ultragear {
 | 
				
			||||||
 | 
					    output "LG Electronics LG ULTRAGEAR+ 406NTJJ6B876" mode 3840x2160@144.05Hz position 0,0 scale 1.00 adaptive_sync on
 | 
				
			||||||
 | 
					    output eDP-1 disable
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Profile: Laptop + Ultrawide (eDP-2)
 | 
				
			||||||
 | 
					profile ultrawide-2 {
 | 
				
			||||||
 | 
					    output eDP-2 mode 3440x1440@99.98Hz position 0,0 scale 1.00 adaptive_sync on
 | 
				
			||||||
 | 
					    output eDP-1 disable
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Profile: Laptop + Ultrawide (eDP-3)
 | 
				
			||||||
 | 
					profile ultrawide-3 {
 | 
				
			||||||
 | 
					    output eDP-3 mode 3440x1440@99.98Hz position 0,0 scale 1.00 adaptive_sync on
 | 
				
			||||||
 | 
					    output eDP-1 disable
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										196
									
								
								nate-work/linked-dotfiles/hypr/hyprland.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										196
									
								
								nate-work/linked-dotfiles/hypr/hyprland.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,196 @@
 | 
				
			|||||||
 | 
					# Hyprland Configuration
 | 
				
			||||||
 | 
					# Converted from Nix settings for nate-work
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Variables
 | 
				
			||||||
 | 
					$mod = Super
 | 
				
			||||||
 | 
					$terminal = ghostty
 | 
				
			||||||
 | 
					$fileManager = nautilus
 | 
				
			||||||
 | 
					$menu = nwg-drawer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Autostart applications
 | 
				
			||||||
 | 
					exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
 | 
				
			||||||
 | 
					exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
 | 
				
			||||||
 | 
					exec-once = blueman-applet
 | 
				
			||||||
 | 
					exec-once = hypridle
 | 
				
			||||||
 | 
					exec-once = kanshi
 | 
				
			||||||
 | 
					exec-once = lxqt-policykit-agent
 | 
				
			||||||
 | 
					exec-once = nm-applet --indicator
 | 
				
			||||||
 | 
					exec-once = sleep 5 && syncthingtray --wait
 | 
				
			||||||
 | 
					exec-once = swaybg -i ~/.config/hypr/va_background.png
 | 
				
			||||||
 | 
					exec-once = swaylock -C ~/.config/swaylock/boot-config
 | 
				
			||||||
 | 
					exec-once = swaync
 | 
				
			||||||
 | 
					exec-once = waybar
 | 
				
			||||||
 | 
					exec-once = firefox --new-tab https://vasion.okta.com --new-tab https://github.com/PrinterLogic --new-tab https://claude.ai
 | 
				
			||||||
 | 
					exec-once = flatpak run org.signal.Signal
 | 
				
			||||||
 | 
					exec-once = flatpak run com.slack.Slack
 | 
				
			||||||
 | 
					exec-once = ghostty
 | 
				
			||||||
 | 
					exec-once = keepassxc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Input configuration
 | 
				
			||||||
 | 
					input {
 | 
				
			||||||
 | 
					    repeat_rate = 50
 | 
				
			||||||
 | 
					    repeat_delay = 350
 | 
				
			||||||
 | 
					    follow_mouse = 0
 | 
				
			||||||
 | 
					    float_switch_override_focus = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    touchpad {
 | 
				
			||||||
 | 
					        natural_scroll = true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Animations
 | 
				
			||||||
 | 
					bezier = easeout, 0, 0.55, 0.45, 1
 | 
				
			||||||
 | 
					animation = workspaces, 1, 1, easeout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Gestures
 | 
				
			||||||
 | 
					gesture = 3, horizontal, workspace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# General layout
 | 
				
			||||||
 | 
					general {
 | 
				
			||||||
 | 
					    gaps_in = 3
 | 
				
			||||||
 | 
					    gaps_out = 5
 | 
				
			||||||
 | 
					    border_size = 3
 | 
				
			||||||
 | 
					    col.active_border = rgba(7e5fddff) rgba(ff5100ff) 60deg
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Decoration
 | 
				
			||||||
 | 
					decoration {
 | 
				
			||||||
 | 
					    rounding = 12
 | 
				
			||||||
 | 
					    inactive_opacity = 0.9
 | 
				
			||||||
 | 
					    dim_inactive = true
 | 
				
			||||||
 | 
					    dim_strength = 0.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    blur {
 | 
				
			||||||
 | 
					        enabled = true
 | 
				
			||||||
 | 
					        passes = 1
 | 
				
			||||||
 | 
					        size = 10
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    shadow {
 | 
				
			||||||
 | 
					        enabled = false
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Cursor
 | 
				
			||||||
 | 
					cursor {
 | 
				
			||||||
 | 
					    no_hardware_cursors = true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Misc
 | 
				
			||||||
 | 
					misc {
 | 
				
			||||||
 | 
					    vfr = 0
 | 
				
			||||||
 | 
					    force_default_wallpaper = 0
 | 
				
			||||||
 | 
					    disable_hyprland_logo = true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Render
 | 
				
			||||||
 | 
					render {
 | 
				
			||||||
 | 
					    direct_scanout = 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Debug (remove when nvidia damage tracking works)
 | 
				
			||||||
 | 
					debug {
 | 
				
			||||||
 | 
					    damage_tracking = 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# OpenGL
 | 
				
			||||||
 | 
					opengl {
 | 
				
			||||||
 | 
					    nvidia_anti_flicker = 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Monitor configuration handled by kanshi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Window rules
 | 
				
			||||||
 | 
					windowrulev2 = float, class:^(org.keepassxc.KeePassXC)$
 | 
				
			||||||
 | 
					windowrulev2 = workspace special:scratch silent, class:^(org.keepassxc.KeePassXC)$
 | 
				
			||||||
 | 
					windowrulev2 = workspace special:scratch silent, class:^(org.signal.Signal)$
 | 
				
			||||||
 | 
					windowrulev2 = workspace 2 silent, class:^(firefox)$
 | 
				
			||||||
 | 
					windowrulev2 = workspace 3 silent, class:^(com.slack.Slack)$
 | 
				
			||||||
 | 
					windowrulev2 = workspace 4 silent, class:^(zoom)$
 | 
				
			||||||
 | 
					windowrulev2 = fullscreen, class:^(zoom)$, title:^(Meeting)$
 | 
				
			||||||
 | 
					windowrulev2 = float, class:^(zoom)$, title:!^(Meeting)$
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Key bindings
 | 
				
			||||||
 | 
					bind = $mod, Q, killactive
 | 
				
			||||||
 | 
					bind = $mod Shift, Q, exit
 | 
				
			||||||
 | 
					bind = $mod, W, exec, firefox
 | 
				
			||||||
 | 
					bind = $mod, D, exec, $menu
 | 
				
			||||||
 | 
					bind = $mod, T, exec, $fileManager
 | 
				
			||||||
 | 
					bind = $mod, code:36, exec, $terminal
 | 
				
			||||||
 | 
					bind = $mod, Space, togglefloating
 | 
				
			||||||
 | 
					bind = $mod Shift, Space, exec, hyprctl dispatch focuswindow $(if [[ $(hyprctl activewindow -j | jq ."floating") == "true" ]]; then echo "tiled"; else echo "floating"; fi;)
 | 
				
			||||||
 | 
					bind = $mod, F, fullscreen, 0
 | 
				
			||||||
 | 
					bind = $mod, Tab, cyclenext
 | 
				
			||||||
 | 
					bind = $mod Shift, Tab, swapnext
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Movement - Arrow keys
 | 
				
			||||||
 | 
					bind = $mod, left, movefocus, l
 | 
				
			||||||
 | 
					bind = $mod, right, movefocus, r
 | 
				
			||||||
 | 
					bind = $mod, up, movefocus, u
 | 
				
			||||||
 | 
					bind = $mod, down, movefocus, d
 | 
				
			||||||
 | 
					bind = $mod Shift, left, movewindow, l
 | 
				
			||||||
 | 
					bind = $mod Shift, right, movewindow, r
 | 
				
			||||||
 | 
					bind = $mod Shift, up, movewindow, u
 | 
				
			||||||
 | 
					bind = $mod Shift, down, movewindow, d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Movement - Colemak-DH
 | 
				
			||||||
 | 
					bind = $mod, N, movefocus, l
 | 
				
			||||||
 | 
					bind = $mod, O, movefocus, r
 | 
				
			||||||
 | 
					bind = $mod, E, movefocus, u
 | 
				
			||||||
 | 
					bind = $mod, I, movefocus, d
 | 
				
			||||||
 | 
					bind = $mod Shift, N, movewindow, l
 | 
				
			||||||
 | 
					bind = $mod Shift, O, movewindow, r
 | 
				
			||||||
 | 
					bind = $mod Shift, E, movewindow, u
 | 
				
			||||||
 | 
					bind = $mod Shift, I, movewindow, d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Special actions
 | 
				
			||||||
 | 
					bind = $mod SHIFT, K, exec, hyprctl keyword 'device[at-translated-set-2-keyboard]:enabled' 'false' && notify-send 'Laptop keyboard disabled' -i nix-snowflake
 | 
				
			||||||
 | 
					bind = $mod SHIFT, R, exec, hyprctl reload && notify-send 'Hypr Config Reloaded' -i nix-snowflake
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Workspaces
 | 
				
			||||||
 | 
					bind = $mod, minus, togglespecialworkspace, scratch
 | 
				
			||||||
 | 
					bind = $mod SHIFT, minus, movetoworkspacesilent, special:scratch
 | 
				
			||||||
 | 
					bind = $mod, M, togglespecialworkspace, music
 | 
				
			||||||
 | 
					bind = $mod Shift, M, exec, ~/.config/hypr/scripts/music_setup.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Screenshots
 | 
				
			||||||
 | 
					bind = $mod, P, exec, ~/.config/hypr/scripts/screenshot.sh clipboard
 | 
				
			||||||
 | 
					bind = $mod SHIFT, P, exec, ~/.config/hypr/scripts/screenshot.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Color picker
 | 
				
			||||||
 | 
					bind = $mod, C, exec, color=$(hyprpicker) && echo $color | wl-copy && notify-send "Copied $color to clipboard"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Notification drawer
 | 
				
			||||||
 | 
					bind = $mod CONTROL, N, exec, swaync-client -t -sw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Workspace bindings (1-9)
 | 
				
			||||||
 | 
					bind = $mod, code:10, workspace, 1
 | 
				
			||||||
 | 
					bind = $mod SHIFT, code:10, movetoworkspacesilent, 1
 | 
				
			||||||
 | 
					bind = $mod, code:11, workspace, 2
 | 
				
			||||||
 | 
					bind = $mod SHIFT, code:11, movetoworkspacesilent, 2
 | 
				
			||||||
 | 
					bind = $mod, code:12, workspace, 3
 | 
				
			||||||
 | 
					bind = $mod SHIFT, code:12, movetoworkspacesilent, 3
 | 
				
			||||||
 | 
					bind = $mod, code:13, workspace, 4
 | 
				
			||||||
 | 
					bind = $mod SHIFT, code:13, movetoworkspacesilent, 4
 | 
				
			||||||
 | 
					bind = $mod, code:14, workspace, 5
 | 
				
			||||||
 | 
					bind = $mod SHIFT, code:14, movetoworkspacesilent, 5
 | 
				
			||||||
 | 
					bind = $mod, code:15, workspace, 6
 | 
				
			||||||
 | 
					bind = $mod SHIFT, code:15, movetoworkspacesilent, 6
 | 
				
			||||||
 | 
					bind = $mod, code:16, workspace, 7
 | 
				
			||||||
 | 
					bind = $mod SHIFT, code:16, movetoworkspacesilent, 7
 | 
				
			||||||
 | 
					bind = $mod, code:17, workspace, 8
 | 
				
			||||||
 | 
					bind = $mod SHIFT, code:17, movetoworkspacesilent, 8
 | 
				
			||||||
 | 
					bind = $mod, code:18, workspace, 9
 | 
				
			||||||
 | 
					bind = $mod SHIFT, code:18, movetoworkspacesilent, 9
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Mouse bindings
 | 
				
			||||||
 | 
					bindm = $mod, mouse:272, movewindow
 | 
				
			||||||
 | 
					bindm = $mod, mouse:273, resizewindow
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Brightness and Volume controls
 | 
				
			||||||
 | 
					bindel = , XF86MonBrightnessDown, exec, brightnessctl s 10%-
 | 
				
			||||||
 | 
					bindel = , XF86MonBrightnessUp, exec, brightnessctl s 10%+
 | 
				
			||||||
 | 
					bindel = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
 | 
				
			||||||
 | 
					bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
 | 
				
			||||||
 | 
					bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
 | 
				
			||||||
 | 
					bindel = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 376 KiB After Width: | Height: | Size: 376 KiB  | 
| 
		 Before Width: | Height: | Size: 2.7 MiB After Width: | Height: | Size: 2.7 MiB  | 
@ -1,6 +1,7 @@
 | 
				
			|||||||
// Global 
 | 
					// Global 
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    "layer": "bottom",
 | 
					    // "mode": "hide",
 | 
				
			||||||
 | 
					    "layer": "top",
 | 
				
			||||||
    "position": "top",
 | 
					    "position": "top",
 | 
				
			||||||
    "margin-top": 3,
 | 
					    "margin-top": 3,
 | 
				
			||||||
    "margin-left": 3,
 | 
					    "margin-left": 3,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,31 +1,9 @@
 | 
				
			|||||||
{ inputs, config, pkgs, ... }:
 | 
					{ inputs, config, pkgs, lib, ... }:
 | 
				
			||||||
  let
 | 
					  let
 | 
				
			||||||
    userName = "nate";
 | 
					    userName = "nate";
 | 
				
			||||||
    fullName = "Nate Anderson";
 | 
					    fullName = "Nate Anderson";
 | 
				
			||||||
    email = "nate.anderson@vasion.com";
 | 
					    email = "nate.anderson@vasion.com";
 | 
				
			||||||
    unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; };
 | 
					    unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; };
 | 
				
			||||||
    # oldstable = import inputs.nixpkgs-23 { system = "x86_64-linux"; config.allowUnfree = true; };
 | 
					 | 
				
			||||||
    # davinciDesktop = pkgs.makeDesktopItem {
 | 
					 | 
				
			||||||
    #   name = "davinci-resolve-studio";
 | 
					 | 
				
			||||||
    #   desktopName = "Davinci Resolve Studio";
 | 
					 | 
				
			||||||
    #   exec = "${oldstable.davinci-resolve-studio}";
 | 
					 | 
				
			||||||
    # };
 | 
					 | 
				
			||||||
    # overlay-unstable = final: prev: {
 | 
					 | 
				
			||||||
    #   unstable = inputs.nixpkgs-unstable.legacyPackages.x86_64-linux;
 | 
					 | 
				
			||||||
    # };
 | 
					 | 
				
			||||||
    # overlay-oldstable = final: prev: {
 | 
					 | 
				
			||||||
    #   pkgs23 = inputs.nixpkgs-23.legacyPackages.x86_64-linux;
 | 
					 | 
				
			||||||
    # };
 | 
					 | 
				
			||||||
    # overlay-unstable = final: prev: {
 | 
					 | 
				
			||||||
    #   # unstable = inputs.nixpkgs-unstable.legacyPackages.x86_64-linux;
 | 
					 | 
				
			||||||
    #   unstable = import inputs.nixpkgs-unstable {
 | 
					 | 
				
			||||||
    #     system = "x86_64-linux";
 | 
					 | 
				
			||||||
    #     config = { 
 | 
					 | 
				
			||||||
    #       allowUnfreePredicate = (pkg: true); 
 | 
					 | 
				
			||||||
    #       allowUnfree = true; 
 | 
					 | 
				
			||||||
    #     }; 
 | 
					 | 
				
			||||||
    #   };
 | 
					 | 
				
			||||||
    # };
 | 
					 | 
				
			||||||
  in
 | 
					  in
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  # nixpkgs.overlays = [
 | 
					  # nixpkgs.overlays = [
 | 
				
			||||||
@ -67,6 +45,7 @@
 | 
				
			|||||||
      # Dev Tools
 | 
					      # Dev Tools
 | 
				
			||||||
      #
 | 
					      #
 | 
				
			||||||
      helix
 | 
					      helix
 | 
				
			||||||
 | 
					      vscode-fhs
 | 
				
			||||||
      unstable.distrobox
 | 
					      unstable.distrobox
 | 
				
			||||||
      unstable.docker_25
 | 
					      unstable.docker_25
 | 
				
			||||||
      docker-compose
 | 
					      docker-compose
 | 
				
			||||||
@ -75,20 +54,22 @@
 | 
				
			|||||||
      mariadb
 | 
					      mariadb
 | 
				
			||||||
      lsp-ai
 | 
					      lsp-ai
 | 
				
			||||||
      python3
 | 
					      python3
 | 
				
			||||||
 | 
					      nodejs_24
 | 
				
			||||||
      cmake
 | 
					      cmake
 | 
				
			||||||
 | 
					      # AI
 | 
				
			||||||
      unstable.claude-code
 | 
					      unstable.claude-code
 | 
				
			||||||
 | 
					      unstable.opencode
 | 
				
			||||||
      # proto
 | 
					      # proto
 | 
				
			||||||
      protobuf
 | 
					      protobuf
 | 
				
			||||||
      protoc-gen-dart
 | 
					      protoc-gen-dart
 | 
				
			||||||
      # Go stuff
 | 
					      # Go stuff
 | 
				
			||||||
      go
 | 
					      go
 | 
				
			||||||
      delve
 | 
					      unstable.delve
 | 
				
			||||||
      gotools
 | 
					      gotools
 | 
				
			||||||
      go-tools
 | 
					      go-tools
 | 
				
			||||||
      govulncheck
 | 
					      govulncheck
 | 
				
			||||||
      unstable.golangci-lint
 | 
					      unstable.golangci-lint
 | 
				
			||||||
      go-swag
 | 
					      go-swag
 | 
				
			||||||
      delve
 | 
					 | 
				
			||||||
      trivy
 | 
					      trivy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # clojure
 | 
					      # clojure
 | 
				
			||||||
@ -135,12 +116,7 @@
 | 
				
			|||||||
      gtop
 | 
					      gtop
 | 
				
			||||||
      htop
 | 
					      htop
 | 
				
			||||||
      neofetch
 | 
					      neofetch
 | 
				
			||||||
      s-tui
 | 
					 | 
				
			||||||
      openapi-tui
 | 
					 | 
				
			||||||
      tasktimer
 | 
					 | 
				
			||||||
      # Normies
 | 
					 | 
				
			||||||
      unzip
 | 
					      unzip
 | 
				
			||||||
      llpp
 | 
					 | 
				
			||||||
      nmap
 | 
					      nmap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      #
 | 
					      #
 | 
				
			||||||
@ -149,11 +125,12 @@
 | 
				
			|||||||
      imv
 | 
					      imv
 | 
				
			||||||
      mpv
 | 
					      mpv
 | 
				
			||||||
      ffmpeg
 | 
					      ffmpeg
 | 
				
			||||||
      tenacity
 | 
					      audacity
 | 
				
			||||||
      yt-dlp
 | 
					      yt-dlp
 | 
				
			||||||
 | 
					      simple-scan
 | 
				
			||||||
 | 
					      # iphone connections
 | 
				
			||||||
      libimobiledevice
 | 
					      libimobiledevice
 | 
				
			||||||
      ifuse
 | 
					      ifuse
 | 
				
			||||||
      simple-scan
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      #
 | 
					      #
 | 
				
			||||||
      # Communication
 | 
					      # Communication
 | 
				
			||||||
@ -190,11 +167,6 @@
 | 
				
			|||||||
    ];
 | 
					    ];
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  home.file."${config.xdg.configHome}" = {
 | 
					 | 
				
			||||||
    source = ../../dotfiles;
 | 
					 | 
				
			||||||
    recursive = true;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # enable saving ssh secrets (needed for go mod installing private packages)
 | 
					  # enable saving ssh secrets (needed for go mod installing private packages)
 | 
				
			||||||
  services.gnome-keyring.enable = true;
 | 
					  services.gnome-keyring.enable = true;
 | 
				
			||||||
  services.gnome-keyring.components = [ "ssh" "secrets" ];
 | 
					  services.gnome-keyring.components = [ "ssh" "secrets" ];
 | 
				
			||||||
@ -343,9 +315,37 @@
 | 
				
			|||||||
    # cursor defined in hypr-home.nix
 | 
					    # cursor defined in hypr-home.nix
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  home.file = lib.mkMerge [
 | 
				
			||||||
 | 
					    # Shared dotfiles
 | 
				
			||||||
 | 
					    (let
 | 
				
			||||||
 | 
					      sharedDotfilesPath = ../../../shared/dotfiles;
 | 
				
			||||||
 | 
					    in
 | 
				
			||||||
 | 
					      if builtins.pathExists sharedDotfilesPath then
 | 
				
			||||||
 | 
					        builtins.listToAttrs (map (name: {
 | 
				
			||||||
 | 
					          name = "${config.xdg.configHome}/${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.xdg.configHome}/${name}";
 | 
				
			||||||
 | 
					          value = { source = localDotfilesPath + "/${name}"; };
 | 
				
			||||||
 | 
					        }) (builtins.attrNames (builtins.readDir localDotfilesPath)))
 | 
				
			||||||
 | 
					      else {})
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  xdg.configFile = {
 | 
					  xdg.configFile = {
 | 
				
			||||||
    "helix".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/shared/dotfiles/helix";
 | 
					    # Active linked dotfiles
 | 
				
			||||||
 | 
					    "hypr".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/nate-work/linked-dotfiles/hypr";
 | 
				
			||||||
    "waybar".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/nate-work/linked-dotfiles/waybar";
 | 
					    "waybar".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/nate-work/linked-dotfiles/waybar";
 | 
				
			||||||
 | 
					    # Shared
 | 
				
			||||||
 | 
					    "helix".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/shared/linked-dotfiles/helix";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Theme files
 | 
				
			||||||
    "gtk-4.0/assets".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/assets";
 | 
					    "gtk-4.0/assets".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/assets";
 | 
				
			||||||
    "gtk-4.0/gtk.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk.css";
 | 
					    "gtk-4.0/gtk.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk.css";
 | 
				
			||||||
    "gtk-4.0/gtk-dark.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk-dark.css";
 | 
					    "gtk-4.0/gtk-dark.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk-dark.css";
 | 
				
			||||||
 | 
				
			|||||||
@ -12,221 +12,15 @@
 | 
				
			|||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  config = lib.mkIf config.hyprhome.enable {
 | 
					  config = lib.mkIf config.hyprhome.enable {
 | 
				
			||||||
    wayland.windowManager.hyprland.enable = true; # enable Hyprland
 | 
					    # Note: We don't use wayland.windowManager.hyprland.enable
 | 
				
			||||||
    # wayland.windowManager.hyprland.package = null; # enable Hyprland
 | 
					    # because it generates config files that conflict with our dotfiles.
 | 
				
			||||||
    # wayland.windowManager.hyprland.portalPackage = null; # enable Hyprland
 | 
					    # Instead, we install hyprland via packages and manage config manually.
 | 
				
			||||||
    wayland.windowManager.hyprland.settings = {
 | 
					 | 
				
			||||||
      "$mod" = "Super";
 | 
					 | 
				
			||||||
      "$terminal" = "ghostty";
 | 
					 | 
				
			||||||
      "$fileManager" = "nautilus";
 | 
					 | 
				
			||||||
      "$menu" = "nwg-drawer";
 | 
					 | 
				
			||||||
      # Autostart
 | 
					 | 
				
			||||||
      exec-once =
 | 
					 | 
				
			||||||
        [
 | 
					 | 
				
			||||||
          ###Start dbus ###
 | 
					 | 
				
			||||||
          # Starting it early may help with app launch times
 | 
					 | 
				
			||||||
          "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
 | 
					 | 
				
			||||||
          "systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
 | 
					 | 
				
			||||||
          # Utils
 | 
					 | 
				
			||||||
          "blueman-applet"
 | 
					 | 
				
			||||||
          "hypridle"
 | 
					 | 
				
			||||||
          "lxqt-policykit-agent"
 | 
					 | 
				
			||||||
          "nm-applet --indicator"
 | 
					 | 
				
			||||||
          "sleep 5 && syncthingtray --wait" # sleep added otherwise it would error...
 | 
					 | 
				
			||||||
          "swaybg -i ~/.config/hypr/va_background.png"
 | 
					 | 
				
			||||||
          "swaylock -C ~/.config/swaylock/boot-config"
 | 
					 | 
				
			||||||
          "swaync"
 | 
					 | 
				
			||||||
          "waybar"
 | 
					 | 
				
			||||||
          # GUI Applications
 | 
					 | 
				
			||||||
          "firefox --new-tab https://vasion.okta.com --new-tab https://github.com/PrinterLogic --new-tab https://claude.ai"
 | 
					 | 
				
			||||||
          "flatpak run org.signal.Signal"
 | 
					 | 
				
			||||||
          "flatpak run com.slack.Slack"
 | 
					 | 
				
			||||||
          "ghostty"
 | 
					 | 
				
			||||||
          "keepassxc"
 | 
					 | 
				
			||||||
          # set gsettings
 | 
					 | 
				
			||||||
          # "dconf write /org/gnome/desktop/interface/cursor-theme \"'catppuccin-macchiato-lavender-cursors'\""
 | 
					 | 
				
			||||||
          # "dconf write /org/gnome/desktop/interface/cursor-size 24"
 | 
					 | 
				
			||||||
          # "dconf write /org/gnome/desktop/interface/icon-theme \"'Papirus-Dark'\""
 | 
					 | 
				
			||||||
          # "dconf write /org/gnome/desktop/interface/gtk-theme \"'catppuccin-macchiato-lavender-compact+rimless'\""
 | 
					 | 
				
			||||||
          # "hyprctl setcursor catppuccin-macchiato-lavender-cursors 24"
 | 
					 | 
				
			||||||
        ];
 | 
					 | 
				
			||||||
      input = {
 | 
					 | 
				
			||||||
        repeat_rate = 50;
 | 
					 | 
				
			||||||
        repeat_delay = 350;
 | 
					 | 
				
			||||||
        touchpad = {
 | 
					 | 
				
			||||||
          natural_scroll = true;
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        follow_mouse = 0; # cursor movement will change focus
 | 
					 | 
				
			||||||
        float_switch_override_focus = 0;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      bezier = [
 | 
					 | 
				
			||||||
        "easeout, 0, 0.55, 0.45, 1"
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
      animation = [
 | 
					 | 
				
			||||||
        "workspaces, 1, 1, easeout"
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
      gesture = [
 | 
					 | 
				
			||||||
        "3, horizontal, workspace"
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
      general = {
 | 
					 | 
				
			||||||
        gaps_in = 3;
 | 
					 | 
				
			||||||
        gaps_out = 5;
 | 
					 | 
				
			||||||
        border_size = 3;
 | 
					 | 
				
			||||||
        "col.active_border" = "rgba(7e5fddff) rgba(ff5100ff) 60deg";
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      decoration = {
 | 
					 | 
				
			||||||
        rounding = 12;
 | 
					 | 
				
			||||||
        inactive_opacity = 0.9;
 | 
					 | 
				
			||||||
        dim_inactive = true;
 | 
					 | 
				
			||||||
        dim_strength = 0.1;
 | 
					 | 
				
			||||||
        blur = {
 | 
					 | 
				
			||||||
          enabled = true;
 | 
					 | 
				
			||||||
          passes = 1;
 | 
					 | 
				
			||||||
          size = 10;
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        shadow.enabled = false;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      bind =
 | 
					 | 
				
			||||||
        [
 | 
					 | 
				
			||||||
          "$mod, Q, killactive"
 | 
					 | 
				
			||||||
          "$mod Shift, Q, exit"
 | 
					 | 
				
			||||||
          "$mod, W, exec, firefox"
 | 
					 | 
				
			||||||
          "$mod, D, exec, $menu"
 | 
					 | 
				
			||||||
          "$mod, T, exec, $fileManager"
 | 
					 | 
				
			||||||
          "$mod, code:36, exec, $terminal" # Enter code
 | 
					 | 
				
			||||||
          "$mod, Space, togglefloating"
 | 
					 | 
				
			||||||
          # Toggle floating / tiled focus
 | 
					 | 
				
			||||||
          "$mod Shift, Space, exec, hyprctl dispatch focuswindow $(if [[ $(hyprctl activewindow -j | jq .\"floating\") == \"true\" ]]; then echo \"tiled\"; else echo \"floating\"; fi;)"
 | 
					 | 
				
			||||||
          "$mod, F, fullscreen, 0"
 | 
					 | 
				
			||||||
          "$mod, Tab, cyclenext"
 | 
					 | 
				
			||||||
          "$mod Shift, Tab, swapnext"
 | 
					 | 
				
			||||||
          "$mod, left, movefocus, l"
 | 
					 | 
				
			||||||
          "$mod, right, movefocus, r"
 | 
					 | 
				
			||||||
          "$mod, up, movefocus, u"
 | 
					 | 
				
			||||||
          "$mod, down, movefocus, d"
 | 
					 | 
				
			||||||
          "$mod Shift, left, movewindow, l"
 | 
					 | 
				
			||||||
          "$mod Shift, right, movewindow, r"
 | 
					 | 
				
			||||||
          "$mod Shift, up, movewindow, u"
 | 
					 | 
				
			||||||
          "$mod Shift, down, movewindow, d"
 | 
					 | 
				
			||||||
          # Colemak-DH binds
 | 
					 | 
				
			||||||
          "$mod, N, movefocus, l"
 | 
					 | 
				
			||||||
          "$mod, O, movefocus, r"
 | 
					 | 
				
			||||||
          "$mod, E, movefocus, u"
 | 
					 | 
				
			||||||
          "$mod, I, movefocus, d"
 | 
					 | 
				
			||||||
          "$mod Shift, N, movewindow, l"
 | 
					 | 
				
			||||||
          "$mod Shift, O, movewindow, r"
 | 
					 | 
				
			||||||
          "$mod Shift, E, movewindow, u"
 | 
					 | 
				
			||||||
          "$mod Shift, I, movewindow, d"
 | 
					 | 
				
			||||||
          # Disabled laptop keyboard
 | 
					 | 
				
			||||||
          "$mod SHIFT, K, exec, hyprctl keyword 'device[at-translated-set-2-keyboard]:enabled' 'false' && notify-send 'Laptop keyboard disabled' -i nix-snowflake"
 | 
					 | 
				
			||||||
          # Reload config
 | 
					 | 
				
			||||||
          "$mod SHIFT, R, exec, hyprctl reload && notify-send 'Hypr Config Reloaded' -i nix-snowflake"
 | 
					 | 
				
			||||||
          # Scratch pad workspace
 | 
					 | 
				
			||||||
          "$mod, minus, togglespecialworkspace, scratch"
 | 
					 | 
				
			||||||
          "$mod SHIFT, minus, movetoworkspacesilent, special:scratch"
 | 
					 | 
				
			||||||
          # Music workspace
 | 
					 | 
				
			||||||
          "$mod, M, togglespecialworkspace, music"
 | 
					 | 
				
			||||||
          # "$mod SHIFT, M, movetoworkspacesilent, special:music"
 | 
					 | 
				
			||||||
          "$mod Shift, M, exec, ~/.config/hypr/scripts/music_setup.sh"
 | 
					 | 
				
			||||||
          # "$mod Control_R, M, exec, ~/.config/hypr/scripts/music_setup.sh"
 | 
					 | 
				
			||||||
          # Screenshots
 | 
					 | 
				
			||||||
          "$mod, P, exec, ~/.config/hypr/scripts/screenshot.sh clipboard"
 | 
					 | 
				
			||||||
          "$mod SHIFT, P, exec, ~/.config/hypr/scripts/screenshot.sh"
 | 
					 | 
				
			||||||
          # Color picker
 | 
					 | 
				
			||||||
          "$mod, C, exec, color=$(hyprpicker) && echo $color | wl-copy && notify-send \"Copied $color to clipboard\""
 | 
					 | 
				
			||||||
          # Toggle notification drawer
 | 
					 | 
				
			||||||
          "$mod CONTROL, N, exec, swaync-client -t -sw"
 | 
					 | 
				
			||||||
        ]
 | 
					 | 
				
			||||||
        ++ (
 | 
					 | 
				
			||||||
          # workspaces
 | 
					 | 
				
			||||||
          # binds $mod + [shift +] {1..9} to [move to] workspace {1..9}
 | 
					 | 
				
			||||||
          builtins.concatLists (builtins.genList (i:
 | 
					 | 
				
			||||||
              let ws = i + 1;
 | 
					 | 
				
			||||||
              in [
 | 
					 | 
				
			||||||
                "$mod, code:1${toString i}, workspace, ${toString ws}"
 | 
					 | 
				
			||||||
                "$mod SHIFT, code:1${toString i}, movetoworkspacesilent, ${toString ws}"
 | 
					 | 
				
			||||||
              ]
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
            9)
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
      bindm = [
 | 
					 | 
				
			||||||
        "$mod, mouse:272, movewindow" # LMB to move window
 | 
					 | 
				
			||||||
        "$mod, mouse:273, resizewindow" # RMB to move window
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
      bindel = [
 | 
					 | 
				
			||||||
        # Brightness / Volume Controls
 | 
					 | 
				
			||||||
        # Chromebook has the printed symbols for these actions, but are really just fn keys
 | 
					 | 
				
			||||||
        ", XF86MonBrightnessDown, exec, brightnessctl s 10%-"
 | 
					 | 
				
			||||||
        ", XF86MonBrightnessUp, exec, brightnessctl s 10%+"
 | 
					 | 
				
			||||||
        ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
 | 
					 | 
				
			||||||
        ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
 | 
					 | 
				
			||||||
        ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"
 | 
					 | 
				
			||||||
        ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
      # Lid switch binds
 | 
					 | 
				
			||||||
      bindl = [
 | 
					 | 
				
			||||||
        # trigger when the switch is turning on
 | 
					 | 
				
			||||||
        ", switch:on:Lid Switch, exec, hyprctl keyword monitor 'eDP-1, disable'"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # trigger when the switch is turning off
 | 
					    # Import systemd variables for hyprland
 | 
				
			||||||
        ", switch:off:Lid Switch, exec, hyprctl keyword monitor 'eDP-1, 2560x1600@165, 0x0, 1.00'"
 | 
					    systemd.user.sessionVariables = {
 | 
				
			||||||
      ];
 | 
					      WAYLAND_DISPLAY = "wayland-1";
 | 
				
			||||||
      windowrulev2 = [
 | 
					      XDG_CURRENT_DESKTOP = "Hyprland";
 | 
				
			||||||
 | 
					 | 
				
			||||||
        # float keepass windows, put main window in scratch
 | 
					 | 
				
			||||||
        "float, class:^(org.keepassxc.KeePassXC)$"
 | 
					 | 
				
			||||||
        "workspace special:scratch silent, class:^(org.keepassxc.KeePassXC)$"
 | 
					 | 
				
			||||||
        "workspace special:scratch silent, class:^(org.signal.Signal)$"
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Firefox to workspace 2
 | 
					 | 
				
			||||||
        "workspace 2 silent, class:^(firefox)$"
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Slack to workspace 3
 | 
					 | 
				
			||||||
        "workspace 3 silent, class:^(com.slack.Slack)$"
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Zoom to workspace 4
 | 
					 | 
				
			||||||
        "workspace 4 silent, class:^(zoom)$" 
 | 
					 | 
				
			||||||
        "fullscreen, class:^(zoom)$, title:^(Meeting)$" 
 | 
					 | 
				
			||||||
        # Float all other zoom windows (not meetings)
 | 
					 | 
				
			||||||
        "float, class:^(zoom)$, title:!^(Meeting)$"        
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      monitor = [
 | 
					 | 
				
			||||||
        "eDP-1, 2560x1600@165, 0x0, 1.00"
 | 
					 | 
				
			||||||
        # At home monitor setup, 144 for hdmi bandwidth
 | 
					 | 
				
			||||||
        "desc:LG Electronics LG ULTRAGEAR+ 406NTJJ6B876, 3840x2160@144, auto, 1, vrr, 1"
 | 
					 | 
				
			||||||
        # Work monitor over USBC
 | 
					 | 
				
			||||||
        "eDP-2, 3440x1440@99.98Hz, auto, 1, vrr, 1"
 | 
					 | 
				
			||||||
        "eDP-3, 3440x1440@99.98Hz, auto, 1, vrr, 1"
 | 
					 | 
				
			||||||
        # Auto tile new unspecified monitors to the right, in preferred resolution
 | 
					 | 
				
			||||||
        ", preferred, auto-right, 1"
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
      cursor = {
 | 
					 | 
				
			||||||
        no_hardware_cursors = true;
 | 
					 | 
				
			||||||
        # allow_dumb_copy = true;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      misc = {
 | 
					 | 
				
			||||||
        # Revert to true when nvidia damage tracking works
 | 
					 | 
				
			||||||
        vfr = 0;
 | 
					 | 
				
			||||||
        force_default_wallpaper = 0;
 | 
					 | 
				
			||||||
        disable_hyprland_logo = true;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      render = {
 | 
					 | 
				
			||||||
        direct_scanout = 0;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      ##
 | 
					 | 
				
			||||||
      ## delete when nvidia damage tracking works (debug & opengl)
 | 
					 | 
				
			||||||
      ##
 | 
					 | 
				
			||||||
      debug = {
 | 
					 | 
				
			||||||
        damage_tracking = 0;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      opengl = {
 | 
					 | 
				
			||||||
        nvidia_anti_flicker = 0;
 | 
					 | 
				
			||||||
        # force_introspection = 2;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    # import variables
 | 
					 | 
				
			||||||
    wayland.windowManager.hyprland.systemd.variables = ["--all"];
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    home.pointerCursor = {
 | 
					    home.pointerCursor = {
 | 
				
			||||||
      gtk.enable = true;
 | 
					      gtk.enable = true;
 | 
				
			||||||
@ -258,6 +52,7 @@
 | 
				
			|||||||
        hyprpicker
 | 
					        hyprpicker
 | 
				
			||||||
        hyprshot
 | 
					        hyprshot
 | 
				
			||||||
        hypridle
 | 
					        hypridle
 | 
				
			||||||
 | 
					        kanshi
 | 
				
			||||||
        # Etc
 | 
					        # Etc
 | 
				
			||||||
        gopsuinfo # For system stats in panel
 | 
					        gopsuinfo # For system stats in panel
 | 
				
			||||||
        wl-clipboard # System clipboard
 | 
					        wl-clipboard # System clipboard
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										5
									
								
								shared/dotfiles/swaync/config.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								shared/dotfiles/swaync/config.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "positionX": "center",
 | 
				
			||||||
 | 
					  "positionY": "top",
 | 
				
			||||||
 | 
					  "notification-window-width": 800
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
* {
 | 
					* {
 | 
				
			||||||
  all: unset;
 | 
					  all: unset;
 | 
				
			||||||
  font-size: 14px;
 | 
					  font-size: 18px;
 | 
				
			||||||
  font-family: "Ubuntu Nerd Font";
 | 
					  font-family: "Ubuntu Nerd Font";
 | 
				
			||||||
  transition: 200ms;
 | 
					  transition: 200ms;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
# Theme
 | 
					# Theme
 | 
				
			||||||
theme = "catppuccin_macchiato"
 | 
					theme = "catppuccin_macchiato_minimal"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[keys.normal]
 | 
					[keys.normal]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -176,7 +176,8 @@ newline = "none"
 | 
				
			|||||||
nbsp = "none"
 | 
					nbsp = "none"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[editor.whitespace.characters]
 | 
					[editor.whitespace.characters]
 | 
				
			||||||
space = "·"
 | 
					space = " "
 | 
				
			||||||
 | 
					# space = "·"
 | 
				
			||||||
tab = "⇀"
 | 
					tab = "⇀"
 | 
				
			||||||
tabpad = " "
 | 
					tabpad = " "
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,21 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[language]]
 | 
					[[language]]
 | 
				
			||||||
name = "go"
 | 
					name = "go"
 | 
				
			||||||
language-servers = ["gopls"]
 | 
					
 | 
				
			||||||
 | 
					[language.debugger]
 | 
				
			||||||
 | 
					name = "go"
 | 
				
			||||||
 | 
					transport = "tcp"
 | 
				
			||||||
 | 
					command = "dlv"
 | 
				
			||||||
 | 
					args = ["connect"]
 | 
				
			||||||
 | 
					port-arg = "127.0.0.1:2345"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[language.debugger.templates]]
 | 
				
			||||||
 | 
					name = "connect"
 | 
				
			||||||
 | 
					request = "launch"
 | 
				
			||||||
 | 
					completion = []
 | 
				
			||||||
 | 
					args = {}
 | 
				
			||||||
 | 
					# completion = [ {name = "port", default = "2345"} ]
 | 
				
			||||||
 | 
					# args = { port = "{0}" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[language]]
 | 
					[[language]]
 | 
				
			||||||
name = "markdown"
 | 
					name = "markdown"
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,149 @@
 | 
				
			|||||||
 | 
					# Catppuccin Macchiato Minimal - Judicious Syntax Highlighting
 | 
				
			||||||
 | 
					# Uses only 4 colors for syntax: lavender (keywords), green (strings), peach (numbers), mauve (comments)
 | 
				
			||||||
 | 
					# Functions and variables remain plain text for reduced visual noise
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"ui.background" = { bg = "base" }
 | 
				
			||||||
 | 
					"ui.virtual" = { fg = "surface0" }
 | 
				
			||||||
 | 
					"ui.virtual.ruler" = { bg = "surface0" }
 | 
				
			||||||
 | 
					"ui.virtual.indent-guide" = { fg = "surface0" }
 | 
				
			||||||
 | 
					"ui.virtual.inlay-hint" = { fg = "overlay1", bg = "mantle", modifiers = ["italic"] }
 | 
				
			||||||
 | 
					"ui.virtual.jump-label" = { fg = "red", modifiers = ["bold"] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"ui.selection" = { bg = "surface1" }
 | 
				
			||||||
 | 
					"ui.selection.primary" = { bg = "surface2" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"ui.cursor" = { fg = "base", bg = "lavender" }
 | 
				
			||||||
 | 
					"ui.cursor.primary" = { fg = "base", bg = "lavender" }
 | 
				
			||||||
 | 
					"ui.cursor.match" = { fg = "peach", modifiers = ["bold"] }
 | 
				
			||||||
 | 
					"ui.cursorline.primary" = { bg = "surface0" }
 | 
				
			||||||
 | 
					"ui.cursorcolumn.primary" = { bg = "surface0" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"ui.linenr" = { fg = "surface1" }
 | 
				
			||||||
 | 
					"ui.linenr.selected" = { fg = "lavender", modifiers = ["bold"] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"ui.statusline" = { fg = "text", bg = "mantle" }
 | 
				
			||||||
 | 
					"ui.statusline.inactive" = { fg = "overlay0", bg = "mantle" }
 | 
				
			||||||
 | 
					"ui.statusline.normal" = { fg = "base", bg = "lavender", modifiers = ["bold"] }
 | 
				
			||||||
 | 
					"ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] }
 | 
				
			||||||
 | 
					"ui.statusline.select" = { fg = "base", bg = "mauve", modifiers = ["bold"] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"ui.bufferline" = { fg = "overlay0", bg = "mantle" }
 | 
				
			||||||
 | 
					"ui.bufferline.active" = { fg = "lavender", bg = "base", modifiers = ["bold"] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"ui.help" = { fg = "text", bg = "surface0" }
 | 
				
			||||||
 | 
					"ui.text" = "text"
 | 
				
			||||||
 | 
					"ui.text.focus" = { fg = "text", bg = "surface0" }
 | 
				
			||||||
 | 
					"ui.text.inactive" = "overlay1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"ui.menu" = { fg = "text", bg = "surface0" }
 | 
				
			||||||
 | 
					"ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] }
 | 
				
			||||||
 | 
					"ui.menu.scroll" = { fg = "overlay0", bg = "surface0" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"ui.popup" = { fg = "text", bg = "surface0" }
 | 
				
			||||||
 | 
					"ui.window" = { fg = "base" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"diagnostic.error" = { underline = { color = "red", style = "curl" } }
 | 
				
			||||||
 | 
					"diagnostic.warning" = { underline = { color = "yellow", style = "curl" } }
 | 
				
			||||||
 | 
					"diagnostic.info" = { underline = { color = "sky", style = "curl" } }
 | 
				
			||||||
 | 
					"diagnostic.hint" = { underline = { color = "teal", style = "curl" } }
 | 
				
			||||||
 | 
					"diagnostic.unnecessary" = { modifiers = ["dim"] }
 | 
				
			||||||
 | 
					"diagnostic.deprecated" = { modifiers = ["crossed_out"] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"error" = "red"
 | 
				
			||||||
 | 
					"warning" = "yellow"
 | 
				
			||||||
 | 
					"info" = "sky"
 | 
				
			||||||
 | 
					"hint" = "teal"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"diff.plus" = "green"
 | 
				
			||||||
 | 
					"diff.minus" = "red"
 | 
				
			||||||
 | 
					"diff.delta" = "yellow"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"markup.heading" = { fg = "lavender", modifiers = ["bold"] }
 | 
				
			||||||
 | 
					"markup.list" = "mauve"
 | 
				
			||||||
 | 
					"markup.bold" = { modifiers = ["bold"] }
 | 
				
			||||||
 | 
					"markup.italic" = { modifiers = ["italic"] }
 | 
				
			||||||
 | 
					"markup.strikethrough" = { modifiers = ["crossed_out"] }
 | 
				
			||||||
 | 
					"markup.link.url" = { fg = "blue", modifiers = ["underlined"] }
 | 
				
			||||||
 | 
					"markup.link.text" = "mauve"
 | 
				
			||||||
 | 
					"markup.quote" = "green"
 | 
				
			||||||
 | 
					"markup.raw" = "green"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Minimal syntax highlighting - only 4 colors used
 | 
				
			||||||
 | 
					"comment" = "yellow"  # Comments pop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"keyword" = { fg = "mauve", modifiers = ["italic"] }  # Keywords highlighted and italic
 | 
				
			||||||
 | 
					"keyword.control" = { fg = "mauve", modifiers = ["italic"] }
 | 
				
			||||||
 | 
					"keyword.directive" = { fg = "mauve", modifiers = ["italic"] }
 | 
				
			||||||
 | 
					"keyword.function" = { fg = "mauve", modifiers = ["italic"] }
 | 
				
			||||||
 | 
					"keyword.operator" = { fg = "mauve", modifiers = ["italic"] }
 | 
				
			||||||
 | 
					"keyword.return" = { fg = "mauve", modifiers = ["italic"] }
 | 
				
			||||||
 | 
					"keyword.storage" = { fg = "mauve", modifiers = ["italic"] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"string" = "green"                          # Strings highlighted
 | 
				
			||||||
 | 
					"string.regexp" = "peach"
 | 
				
			||||||
 | 
					"string.special" = "green"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"constant.numeric" = "peach"                # Numbers highlighted
 | 
				
			||||||
 | 
					"constant.builtin" = "peach"
 | 
				
			||||||
 | 
					"constant.character.escape" = "peach"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Everything else remains plain text
 | 
				
			||||||
 | 
					"function" = "text"                         # Functions are plain text
 | 
				
			||||||
 | 
					"function.builtin" = "text"
 | 
				
			||||||
 | 
					"function.method" = "text"
 | 
				
			||||||
 | 
					"function.macro" = "text"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"variable" = "text"                         # Variables are plain text
 | 
				
			||||||
 | 
					"variable.builtin" = "text"
 | 
				
			||||||
 | 
					"variable.parameter" = "text"
 | 
				
			||||||
 | 
					"variable.other.member" = "text"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"type" = "lavender"                            # Types are slightly highlighted
 | 
				
			||||||
 | 
					"type.builtin" = "lavender"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"constructor" = "text"                      # Constructors are plain text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"attribute" = "text"
 | 
				
			||||||
 | 
					"label" = "text"
 | 
				
			||||||
 | 
					"namespace" = "text"
 | 
				
			||||||
 | 
					"tag" = "text"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Top-level declarations get keyword color
 | 
				
			||||||
 | 
					"function.definition" = { fg = "flamingo", modifiers = ["bold"] }
 | 
				
			||||||
 | 
					"type.definition" = { fg = "flamingo", modifiers = ["bold"] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Punctuation is slightly dimmed but still readable
 | 
				
			||||||
 | 
					"punctuation" = "subtext0"
 | 
				
			||||||
 | 
					"punctuation.bracket" = "subtext0"
 | 
				
			||||||
 | 
					"punctuation.delimiter" = "subtext0"
 | 
				
			||||||
 | 
					"punctuation.special" = "subtext0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"operator" = "subtext0"                     # Operators slightly dimmed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[palette]
 | 
				
			||||||
 | 
					rosewater = "#f4dbd6"
 | 
				
			||||||
 | 
					flamingo = "#f0c6c6"
 | 
				
			||||||
 | 
					pink = "#f5bde6"
 | 
				
			||||||
 | 
					mauve = "#c6a0f6"
 | 
				
			||||||
 | 
					red = "#ed8796"
 | 
				
			||||||
 | 
					maroon = "#ee99a0"
 | 
				
			||||||
 | 
					peach = "#f5a97f"
 | 
				
			||||||
 | 
					yellow = "#eed49f"
 | 
				
			||||||
 | 
					green = "#a6da95"
 | 
				
			||||||
 | 
					teal = "#8bd5ca"
 | 
				
			||||||
 | 
					sky = "#91d7e3"
 | 
				
			||||||
 | 
					sapphire = "#7dc4e4"
 | 
				
			||||||
 | 
					blue = "#8aadf4"
 | 
				
			||||||
 | 
					lavender = "#b7bdf8"
 | 
				
			||||||
 | 
					text = "#cad3f5"
 | 
				
			||||||
 | 
					subtext1 = "#b8c0e0"
 | 
				
			||||||
 | 
					subtext0 = "#a5adcb"
 | 
				
			||||||
 | 
					overlay2 = "#939ab7"
 | 
				
			||||||
 | 
					overlay1 = "#8087a2"
 | 
				
			||||||
 | 
					overlay0 = "#6e738d"
 | 
				
			||||||
 | 
					surface2 = "#5b6078"
 | 
				
			||||||
 | 
					surface1 = "#494d64"
 | 
				
			||||||
 | 
					surface0 = "#363a4f"
 | 
				
			||||||
 | 
					base = "#24273a"
 | 
				
			||||||
 | 
					mantle = "#1e2030"
 | 
				
			||||||
 | 
					crust = "#181926"
 | 
				
			||||||
							
								
								
									
										16
									
								
								shared/linked-dotfiles/opencode/opencode.jsonc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								shared/linked-dotfiles/opencode/opencode.jsonc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "$schema": "https://opencode.ai/config.json",
 | 
				
			||||||
 | 
					  "theme": "catppuccin",
 | 
				
			||||||
 | 
					  "autoupdate": false,
 | 
				
			||||||
 | 
					  "model": "claude-sonnet-4-5",
 | 
				
			||||||
 | 
					  "small_model": "claude-haiku-4-5",
 | 
				
			||||||
 | 
					  "mcp": {
 | 
				
			||||||
 | 
					    "context7": {
 | 
				
			||||||
 | 
					      "type": "remote",
 | 
				
			||||||
 | 
					      "url": "https://mcp.context7.com/mcp",
 | 
				
			||||||
 | 
					      "headers": {
 | 
				
			||||||
 | 
					        "CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user