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 = {
|
||||||
|
# Active linked dotfiles
|
||||||
"niri".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/frame12/linked-dotfiles/niri";
|
"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