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": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1759831965,
 | 
			
		||||
        "narHash": "sha256-vgPm2xjOmKdZ0xKA6yLXPJpjOtQPHfaZDRtH+47XEBo=",
 | 
			
		||||
        "lastModified": 1760524057,
 | 
			
		||||
        "narHash": "sha256-EVAqOteLBFmd7pKkb0+FIUyzTF61VKi7YmvP1tw4nEw=",
 | 
			
		||||
        "owner": "nixos",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "c9b6fb798541223bbb396d287d16f43520250518",
 | 
			
		||||
        "rev": "544961dfcce86422ba200ed9a0b00dd4b1486ec5",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
@ -114,11 +114,11 @@
 | 
			
		||||
    },
 | 
			
		||||
    "nixpkgs_2": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1759735786,
 | 
			
		||||
        "narHash": "sha256-a0+h02lyP2KwSNrZz4wLJTu9ikujNsTWIC874Bv7IJ0=",
 | 
			
		||||
        "lastModified": 1760423683,
 | 
			
		||||
        "narHash": "sha256-Tb+NYuJhWZieDZUxN6PgglB16yuqBYQeMJyYBGCXlt8=",
 | 
			
		||||
        "owner": "nixos",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "20c4598c84a671783f741e02bf05cbfaf4907cff",
 | 
			
		||||
        "rev": "a493e93b4a259cd9fea8073f89a7ed9b1c5a1da2",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
 | 
			
		||||
@ -138,7 +138,7 @@
 | 
			
		||||
      if builtins.pathExists sharedDotfilesPath then
 | 
			
		||||
        builtins.listToAttrs (map (name: {
 | 
			
		||||
          name = "${config.xdg.configHome}/${name}";
 | 
			
		||||
          value = { source = sharedDotfilesPath + "/${name}"; };
 | 
			
		||||
          value = { source = lib.mkDefault (sharedDotfilesPath + "/${name}"); };
 | 
			
		||||
        }) (builtins.attrNames (builtins.readDir sharedDotfilesPath)))
 | 
			
		||||
      else {})
 | 
			
		||||
    # Add local dotfiles, overriding from local over shared
 | 
			
		||||
@ -161,8 +161,10 @@
 | 
			
		||||
 | 
			
		||||
  # Active symlinks
 | 
			
		||||
  xdg.configFile = {
 | 
			
		||||
    # 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";
 | 
			
		||||
    # Shared
 | 
			
		||||
    "helix".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/shared/linked-dotfiles/helix";
 | 
			
		||||
    
 | 
			
		||||
    # 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 
 | 
			
		||||
{
 | 
			
		||||
    "layer": "bottom",
 | 
			
		||||
    // "mode": "hide",
 | 
			
		||||
    "layer": "top",
 | 
			
		||||
    "position": "top",
 | 
			
		||||
    "margin-top": 3,
 | 
			
		||||
    "margin-left": 3,
 | 
			
		||||
 | 
			
		||||
@ -1,31 +1,9 @@
 | 
			
		||||
{ inputs, config, pkgs, ... }:
 | 
			
		||||
{ 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; };
 | 
			
		||||
    # 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
 | 
			
		||||
{
 | 
			
		||||
  # nixpkgs.overlays = [
 | 
			
		||||
@ -67,6 +45,7 @@
 | 
			
		||||
      # Dev Tools
 | 
			
		||||
      #
 | 
			
		||||
      helix
 | 
			
		||||
      vscode-fhs
 | 
			
		||||
      unstable.distrobox
 | 
			
		||||
      unstable.docker_25
 | 
			
		||||
      docker-compose
 | 
			
		||||
@ -75,20 +54,22 @@
 | 
			
		||||
      mariadb
 | 
			
		||||
      lsp-ai
 | 
			
		||||
      python3
 | 
			
		||||
      nodejs_24
 | 
			
		||||
      cmake
 | 
			
		||||
      # AI
 | 
			
		||||
      unstable.claude-code
 | 
			
		||||
      unstable.opencode
 | 
			
		||||
      # proto
 | 
			
		||||
      protobuf
 | 
			
		||||
      protoc-gen-dart
 | 
			
		||||
      # Go stuff
 | 
			
		||||
      go
 | 
			
		||||
      delve
 | 
			
		||||
      unstable.delve
 | 
			
		||||
      gotools
 | 
			
		||||
      go-tools
 | 
			
		||||
      govulncheck
 | 
			
		||||
      unstable.golangci-lint
 | 
			
		||||
      go-swag
 | 
			
		||||
      delve
 | 
			
		||||
      trivy
 | 
			
		||||
 | 
			
		||||
      # clojure
 | 
			
		||||
@ -135,12 +116,7 @@
 | 
			
		||||
      gtop
 | 
			
		||||
      htop
 | 
			
		||||
      neofetch
 | 
			
		||||
      s-tui
 | 
			
		||||
      openapi-tui
 | 
			
		||||
      tasktimer
 | 
			
		||||
      # Normies
 | 
			
		||||
      unzip
 | 
			
		||||
      llpp
 | 
			
		||||
      nmap
 | 
			
		||||
 | 
			
		||||
      #
 | 
			
		||||
@ -149,11 +125,12 @@
 | 
			
		||||
      imv
 | 
			
		||||
      mpv
 | 
			
		||||
      ffmpeg
 | 
			
		||||
      tenacity
 | 
			
		||||
      audacity
 | 
			
		||||
      yt-dlp
 | 
			
		||||
      simple-scan
 | 
			
		||||
      # iphone connections
 | 
			
		||||
      libimobiledevice
 | 
			
		||||
      ifuse
 | 
			
		||||
      simple-scan
 | 
			
		||||
 | 
			
		||||
      #
 | 
			
		||||
      # 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)
 | 
			
		||||
  services.gnome-keyring.enable = true;
 | 
			
		||||
  services.gnome-keyring.components = [ "ssh" "secrets" ];
 | 
			
		||||
@ -343,9 +315,37 @@
 | 
			
		||||
    # 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 = {
 | 
			
		||||
    "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";
 | 
			
		||||
    # 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/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";
 | 
			
		||||
 | 
			
		||||
@ -12,221 +12,15 @@
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  config = lib.mkIf config.hyprhome.enable {
 | 
			
		||||
    wayland.windowManager.hyprland.enable = true; # enable Hyprland
 | 
			
		||||
    # wayland.windowManager.hyprland.package = null; # enable Hyprland
 | 
			
		||||
    # wayland.windowManager.hyprland.portalPackage = null; # enable Hyprland
 | 
			
		||||
    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'"
 | 
			
		||||
    # Note: We don't use wayland.windowManager.hyprland.enable
 | 
			
		||||
    # because it generates config files that conflict with our dotfiles.
 | 
			
		||||
    # Instead, we install hyprland via packages and manage config manually.
 | 
			
		||||
 | 
			
		||||
        # trigger when the switch is turning off
 | 
			
		||||
        ", switch:off:Lid Switch, exec, hyprctl keyword monitor 'eDP-1, 2560x1600@165, 0x0, 1.00'"
 | 
			
		||||
      ];
 | 
			
		||||
      windowrulev2 = [
 | 
			
		||||
 | 
			
		||||
        # 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;
 | 
			
		||||
    # Import systemd variables for hyprland
 | 
			
		||||
    systemd.user.sessionVariables = {
 | 
			
		||||
      WAYLAND_DISPLAY = "wayland-1";
 | 
			
		||||
      XDG_CURRENT_DESKTOP = "Hyprland";
 | 
			
		||||
    };
 | 
			
		||||
      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 = {
 | 
			
		||||
      gtk.enable = true;
 | 
			
		||||
@ -258,6 +52,7 @@
 | 
			
		||||
        hyprpicker
 | 
			
		||||
        hyprshot
 | 
			
		||||
        hypridle
 | 
			
		||||
        kanshi
 | 
			
		||||
        # Etc
 | 
			
		||||
        gopsuinfo # For system stats in panel
 | 
			
		||||
        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;
 | 
			
		||||
  font-size: 14px;
 | 
			
		||||
  font-size: 18px;
 | 
			
		||||
  font-family: "Ubuntu Nerd Font";
 | 
			
		||||
  transition: 200ms;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
# Theme
 | 
			
		||||
theme = "catppuccin_macchiato"
 | 
			
		||||
theme = "catppuccin_macchiato_minimal"
 | 
			
		||||
 | 
			
		||||
[keys.normal]
 | 
			
		||||
 | 
			
		||||
@ -176,7 +176,8 @@ newline = "none"
 | 
			
		||||
nbsp = "none"
 | 
			
		||||
 | 
			
		||||
[editor.whitespace.characters]
 | 
			
		||||
space = "·"
 | 
			
		||||
space = " "
 | 
			
		||||
# space = "·"
 | 
			
		||||
tab = "⇀"
 | 
			
		||||
tabpad = " "
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,21 @@
 | 
			
		||||
 | 
			
		||||
[[language]]
 | 
			
		||||
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]]
 | 
			
		||||
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