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 = {
|
||||
"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";
|
||||
# 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;
|
||||
};
|
||||
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 systemd variables for hyprland
|
||||
systemd.user.sessionVariables = {
|
||||
WAYLAND_DISPLAY = "wayland-1";
|
||||
XDG_CURRENT_DESKTOP = "Hyprland";
|
||||
};
|
||||
# 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