Compare commits
4 Commits
master
...
23fb30893d
| Author | SHA1 | Date | |
|---|---|---|---|
| 23fb30893d | |||
| 4e82b684e5 | |||
| e354c4e194 | |||
| b956c8da1e |
2
.gitignore
vendored
Executable file → Normal file
2
.gitignore
vendored
Executable file → Normal file
@@ -1,5 +1,3 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
_scratch
|
_scratch
|
||||||
result
|
result
|
||||||
._*
|
|
||||||
.direnv
|
|
||||||
|
|||||||
31
.sops.yaml
31
.sops.yaml
@@ -1,31 +0,0 @@
|
|||||||
keys:
|
|
||||||
# Global Admin
|
|
||||||
- &admin_reichard age1sac93wpnjcv62s7583jv6a4yspndh6k0r25g3qx3k7gq748uvafst6nz4w
|
|
||||||
|
|
||||||
# User SSH Derived
|
|
||||||
- &user_lin-va-mbp-personal age17ayje4uv2mhwehhp9jr3u9l0ds07396kt7ef40sufx89vm7cgfjq6d5d4y
|
|
||||||
- &user_mac-va-mbp-personal age1dccte7xtwswgef089nd80dutp96xnezx5lrqnneh9cusegsnda8sj3dj6c
|
|
||||||
- &user_lin-va-thinkpad age1avlhszrryt4gf4ya536jhzm7qwt9xfttm8x4sns6h9w2tahzqp8sspz9y5
|
|
||||||
- &user_lin-va-desktop age15hdlen5dgjvdfgg2j0uzvchs5vs3xuptkhsw9xeuatcuk6uwrvcsz7hcsg
|
|
||||||
|
|
||||||
# System SSH Derived
|
|
||||||
- &system_lin-va-desktop age1mxjrvjxkn69kfn2np3wpd73g44fuhsgykw7l5ss9rx30em5jfp2scnrq32
|
|
||||||
- &system_lin-va-thinkpad age13gymlygyac9z2slecl53jp8spq7e8n4zkan86n0gmnm3nrj4muxqa5ullm
|
|
||||||
creation_rules:
|
|
||||||
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
|
||||||
key_groups:
|
|
||||||
- age:
|
|
||||||
- *admin_reichard
|
|
||||||
- path_regex: secrets/common/systems.yaml
|
|
||||||
key_groups:
|
|
||||||
- age:
|
|
||||||
- *admin_reichard
|
|
||||||
- *system_lin-va-desktop
|
|
||||||
- *system_lin-va-thinkpad
|
|
||||||
- path_regex: secrets/common/evanreichard.yaml
|
|
||||||
key_groups:
|
|
||||||
- age:
|
|
||||||
- *admin_reichard
|
|
||||||
- *user_lin-va-mbp-personal
|
|
||||||
- *user_lin-va-thinkpad
|
|
||||||
- *user_mac-va-mbp-personal
|
|
||||||
132
README.md
Executable file → Normal file
132
README.md
Executable file → Normal file
@@ -2,103 +2,59 @@
|
|||||||
|
|
||||||
This repository contains the configuration for multiple machines, as well as my home / IDE config (home-manager).
|
This repository contains the configuration for multiple machines, as well as my home / IDE config (home-manager).
|
||||||
|
|
||||||
```bash
|
|
||||||
# Install NixOS
|
|
||||||
./bootstrap.sh install --name lin-va-nix-builder
|
|
||||||
|
|
||||||
# Remote Image Build (NixOS Builder)
|
|
||||||
./bootstrap.sh image --name lin-va-rke2 --remote
|
|
||||||
|
|
||||||
# Home Manager Install
|
|
||||||
home-manager switch --flake .#evanreichard@mac-va-mbp-personal
|
|
||||||
|
|
||||||
# Update Flake
|
|
||||||
nix flake update
|
|
||||||
```
|
|
||||||
|
|
||||||
## Manual
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Install NixOS
|
|
||||||
sudo nixos-rebuild switch --flake .#lin-va-mbp-personal
|
|
||||||
|
|
||||||
# Install NixOS (Remote)
|
|
||||||
nix run github:nix-community/nixos-anywhere -- --flake .#lin-cloud-kube1 --target-host \<USER\>@\<IP\>
|
|
||||||
|
|
||||||
# Build Image
|
|
||||||
nix build .#vmwareConfigurations.lin-va-rke2
|
|
||||||
```
|
|
||||||
|
|
||||||
## Nix Darwin
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Install Nix Without Determinate
|
|
||||||
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
|
|
||||||
|
|
||||||
# Switch Nix Darwin
|
|
||||||
sudo nix run nix-darwin#darwin-rebuild -- switch --flake .#mac-va-mbp-personal
|
|
||||||
sudo darwin-rebuild switch --flake .#mac-va-mbp-personal
|
|
||||||
```
|
|
||||||
|
|
||||||
## Clean Garbage
|
|
||||||
|
|
||||||
NOTE: This will remove previous generations
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo nix-collect-garbage --delete-old
|
|
||||||
nix-collect-garbage --delete-old
|
|
||||||
```
|
|
||||||
|
|
||||||
## Home Manager
|
## Home Manager
|
||||||
|
|
||||||
```bash
|
Utilizing [Home Manager](https://nix-community.github.io/home-manager/). Check out the [README.md](./home-manager/README.md).
|
||||||
# Update System Channels
|
|
||||||
sudo nix-channel --add https://nixos.org/channels/nixpkgs-25.11-darwin nixpkgs
|
|
||||||
sudo nix-channel --update
|
|
||||||
|
|
||||||
# Update Home Manager
|
## NixOS
|
||||||
nix-channel --add https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz home-manager
|
|
||||||
nix-channel --update
|
|
||||||
|
|
||||||
# Link Repo
|
### NixOS Generators
|
||||||
ln -s /Users/evanreichard/Development/git/personal/nix/home-manager ~/.config/home-manager
|
|
||||||
|
|
||||||
# Build Home Manager
|
|
||||||
home-manager switch
|
|
||||||
```
|
|
||||||
|
|
||||||
### OS Update
|
|
||||||
|
|
||||||
`/etc/bashrc` may get overridden. To properly load Nix, prepend the following:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Nix
|
nix build .#packages.x86_64-linux.rke2-image
|
||||||
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
|
|
||||||
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
|
|
||||||
fi
|
|
||||||
# End Nix
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### SOPS
|
### NixOS Hosts
|
||||||
|
|
||||||
1. Convert your SSH key to an age key
|
#### Copy Config
|
||||||
2. Get age public key
|
|
||||||
3. Update `.sops.yaml` with rules
|
|
||||||
4. Edit file
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ensure Config
|
rsync -av --exclude='.git' . root@HOST:/etc/nixos
|
||||||
mkdir -p ~/.config/sops/age
|
```
|
||||||
|
|
||||||
# Convert SSH to Age
|
#### Partition Drives
|
||||||
ssh-to-age -private-key -i $HOME/.ssh/id_ed25519 -o ~/.config/sops/age/keys.txt
|
|
||||||
|
```bash
|
||||||
# Get Public Key
|
# Validate Disk
|
||||||
age-keygen -y ~/.config/sops/age/keys.txt
|
ls -l /dev/disk/by-id
|
||||||
ssh-to-age -private-key -i ~/.ssh/id_ed25519 | age-keygen -y
|
|
||||||
SOPS_AGE_KEY_FILE=<ADMIN_KEY> sops -d --extract '["lin-va-desktop"]["host"]' ./secrets/keys.yaml | ssh-to-age -private-key | age-keygen -y
|
# Partition Disk
|
||||||
|
# WARNING: This will destroy all data on the disk(s)
|
||||||
# Edit File
|
sudo nix \
|
||||||
# NOTE: You can specify key with - `SOPS_AGE_KEY_FILE=~/.config/sops/age/other.txt`
|
--experimental-features "nix-command flakes" \
|
||||||
sops secrets/lin-va-thinkpad/evanreichard/default.yaml
|
run github:nix-community/disko -- \
|
||||||
|
--mode disko \
|
||||||
|
--flake /etc/nixos#HOST_CONFIG
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Install NixOS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install
|
||||||
|
sudo nixos-install --flake /etc/nixos#HOST_CONFIG
|
||||||
|
|
||||||
|
# Reboot
|
||||||
|
sudo reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Copy Config Back to Host
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rsync -av --exclude='.git' . root@HOST:/etc/nixos
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Rebuild NixOS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo nixos-rebuild switch
|
||||||
```
|
```
|
||||||
|
|||||||
53
bootstrap.sh
53
bootstrap.sh
@@ -1,9 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
export NIX_CONFIG="experimental-features = nix-command flakes"
|
|
||||||
|
|
||||||
function cmd_image() {
|
function cmd_image() {
|
||||||
local usage="Usage: $0 image --name <image-name> [--remote]"
|
local usage="Usage: $0 image --name <image-name>"
|
||||||
local name=""
|
local name=""
|
||||||
local remote=false
|
local remote=false
|
||||||
|
|
||||||
@@ -31,13 +29,14 @@ function cmd_image() {
|
|||||||
|
|
||||||
# Validate Config Exists
|
# Validate Config Exists
|
||||||
if ! nix eval --json --impure \
|
if ! nix eval --json --impure \
|
||||||
".#vmwareConfigurations" \
|
--experimental-features "nix-command flakes" \
|
||||||
|
".#packages.x86_64-linux" \
|
||||||
--apply "s: builtins.hasAttr \"$name\" s" 2>/dev/null | grep -q "true"; then
|
--apply "s: builtins.hasAttr \"$name\" s" 2>/dev/null | grep -q "true"; then
|
||||||
echo "Error: NixOS Generator Config '$name' not found"
|
echo "Error: NixOS Generator Config '$name' not found"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
build_args=(".#vmwareConfigurations.$name")
|
build_args=(".#packages.x86_64-linux.$name")
|
||||||
if [ "$remote" = true ]; then
|
if [ "$remote" = true ]; then
|
||||||
build_args+=("-j0")
|
build_args+=("-j0")
|
||||||
fi
|
fi
|
||||||
@@ -51,9 +50,8 @@ function cmd_image() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function cmd_install() {
|
function cmd_install() {
|
||||||
local usage="Usage: $0 install --name <system-name> [--remote <user@remote-host>]"
|
local usage="Usage: $0 install --name <system-name>"
|
||||||
local name=""
|
local name=""
|
||||||
local remote=""
|
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
while [[ $# -gt 0 ]]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
@@ -61,10 +59,6 @@ function cmd_install() {
|
|||||||
name="$2"
|
name="$2"
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
--remote)
|
|
||||||
remote="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
echo "$usage"
|
echo "$usage"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -79,6 +73,7 @@ function cmd_install() {
|
|||||||
|
|
||||||
# Validate Config Exists
|
# Validate Config Exists
|
||||||
if ! nix eval --json --impure \
|
if ! nix eval --json --impure \
|
||||||
|
--experimental-features "nix-command flakes" \
|
||||||
".#nixosConfigurations" \
|
".#nixosConfigurations" \
|
||||||
--apply "s: builtins.hasAttr \"$name\" s" 2>/dev/null | grep -q "true"; then
|
--apply "s: builtins.hasAttr \"$name\" s" 2>/dev/null | grep -q "true"; then
|
||||||
echo "Error: NixOS configuration '$name' not found"
|
echo "Error: NixOS configuration '$name' not found"
|
||||||
@@ -87,23 +82,12 @@ function cmd_install() {
|
|||||||
|
|
||||||
# Validate mainDiskID Exists
|
# Validate mainDiskID Exists
|
||||||
if ! disk_id=$(nix eval --raw --impure \
|
if ! disk_id=$(nix eval --raw --impure \
|
||||||
".#nixosConfigurations.$name.config.disko.devices.disk.main.device" 2>/dev/null); then
|
--experimental-features "nix-command flakes" \
|
||||||
|
".#nixosConfigurations.$name.config.mainDiskID" 2>/dev/null); then
|
||||||
echo "Error: mainDiskID not defined for configuration '$name'"
|
echo "Error: mainDiskID not defined for configuration '$name'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Remote or Local
|
|
||||||
if [ -n "$remote" ]; then
|
|
||||||
cmd_install_remote "$name" "$remote"
|
|
||||||
else
|
|
||||||
cmd_install_local "$name" "$disk_id"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function cmd_install_local(){
|
|
||||||
local name="$1"
|
|
||||||
local disk_id="$2"
|
|
||||||
|
|
||||||
# Validate Disk Exists
|
# Validate Disk Exists
|
||||||
if [ ! -e "$disk_id" ]; then
|
if [ ! -e "$disk_id" ]; then
|
||||||
echo "Error: Disk $disk_id not found on system"
|
echo "Error: Disk $disk_id not found on system"
|
||||||
@@ -150,27 +134,6 @@ function cmd_install_local(){
|
|||||||
sudo reboot
|
sudo reboot
|
||||||
}
|
}
|
||||||
|
|
||||||
function cmd_install_remote(){
|
|
||||||
local name="$1"
|
|
||||||
local remote="$2"
|
|
||||||
|
|
||||||
# Prompt Install
|
|
||||||
read -p "This will completely wipe and install NixOS on $remote with configuration $name. Continue? (y/n) " -n 1 -r
|
|
||||||
echo
|
|
||||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
||||||
echo "Operation Cancelled"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install NixOS
|
|
||||||
echo "Installing $name to remote host: $remote"
|
|
||||||
if ! nix run github:nix-community/nixos-anywhere -- --flake ".#$name" --target-host "$remote"; then
|
|
||||||
echo "Error: Remote NixOS installation failed"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Successfully installed $name to remote host: $remote"
|
|
||||||
}
|
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
image)
|
image)
|
||||||
shift
|
shift
|
||||||
|
|||||||
160
flake.lock
generated
Executable file → Normal file
160
flake.lock
generated
Executable file → Normal file
@@ -5,53 +5,33 @@
|
|||||||
"flake-compat": "flake-compat",
|
"flake-compat": "flake-compat",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
],
|
||||||
|
"rust-overlay": "rust-overlay"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768564560,
|
"lastModified": 1742098834,
|
||||||
"narHash": "sha256-YyIzhZoFVE4C5P9e0wZGjx4P9IT/OTUMFF3r6iKd3UY=",
|
"narHash": "sha256-l98XVpNXW6hr0AsxCeQZbdf6EGT8OpHdkWBi7sdel4s=",
|
||||||
"owner": "nix-community",
|
"owner": "tpwrules",
|
||||||
"repo": "nixos-apple-silicon",
|
"repo": "nixos-apple-silicon",
|
||||||
"rev": "83a2bb509972148aa6d3f75c65103b6bfb7898af",
|
"rev": "8457960249bcfd34c22838e20eaa7d8261428688",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"owner": "tpwrules",
|
||||||
"repo": "nixos-apple-silicon",
|
"repo": "nixos-apple-silicon",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"darwin": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1767634391,
|
|
||||||
"narHash": "sha256-owcSz2ICqTSvhBbhPP+1eWzi88e54rRZtfCNE5E/wwg=",
|
|
||||||
"owner": "nix-darwin",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"rev": "08585aacc3d6d6c280a02da195fdbd4b9cf083c2",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-darwin",
|
|
||||||
"ref": "nix-darwin-25.11",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"disko": {
|
"disko": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1766150702,
|
"lastModified": 1739841949,
|
||||||
"narHash": "sha256-P0kM+5o+DKnB6raXgFEk3azw8Wqg5FL6wyl9jD+G5a4=",
|
"narHash": "sha256-lSOXdgW/1zi/SSu7xp71v+55D5Egz8ACv0STkj7fhbs=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "disko",
|
"repo": "disko",
|
||||||
"rev": "916506443ecd0d0b4a0f4cf9d40a3c22ce39b378",
|
"rev": "15dbf8cebd8e2655a883b74547108e089f051bf0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -60,35 +40,13 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"firefox-addons": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"dir": "pkgs/firefox-addons",
|
|
||||||
"lastModified": 1768622624,
|
|
||||||
"narHash": "sha256-Em6PP667PeXbEjidbV2LnNwmUYohbrSFvVPLYLUDHms=",
|
|
||||||
"owner": "rycee",
|
|
||||||
"repo": "nur-expressions",
|
|
||||||
"rev": "8061c6d9199dc6cc0727d4241959eea28f2fa0a6",
|
|
||||||
"type": "gitlab"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"dir": "pkgs/firefox-addons",
|
|
||||||
"owner": "rycee",
|
|
||||||
"repo": "nur-expressions",
|
|
||||||
"type": "gitlab"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1761640442,
|
"lastModified": 1688025799,
|
||||||
"narHash": "sha256-AtrEP6Jmdvrqiv4x2xa5mrtaIp3OEe8uBYCDZDS+hu8=",
|
"narHash": "sha256-ktpB4dRtnksm9F5WawoIkEneh1nrEvuxb5lJFt1iOyw=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "4a56054d8ffc173222d09dad23adf4ba946c8884",
|
"rev": "8bf105319d44f6b9f0d764efa4fdef9f1cc9ba1c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -157,16 +115,16 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768603898,
|
"lastModified": 1742655702,
|
||||||
"narHash": "sha256-vRV1dWJOCpCal3PRr86wE2WTOMfAhTu6G7bSvOsryUo=",
|
"narHash": "sha256-jbqlw4sPArFtNtA1s3kLg7/A4fzP4GLk9bGbtUJg0JQ=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "2a63d0e9d2c72ac4d4150ebb242cf8d86f488c8c",
|
"rev": "0948aeedc296f964140d9429223c7e4a0702a1ff",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"ref": "release-25.11",
|
"ref": "release-24.11",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -194,11 +152,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1764234087,
|
"lastModified": 1737057290,
|
||||||
"narHash": "sha256-NHF7QWa0ZPT8hsJrvijREW3+nifmF2rTXgS2v0tpcEA=",
|
"narHash": "sha256-3Pe0yKlCc7EOeq1X/aJVDH0CtNL+tIBm49vpepwL1MQ=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixos-generators",
|
"repo": "nixos-generators",
|
||||||
"rev": "032a1878682fafe829edfcf5fdfad635a2efe748",
|
"rev": "d002ce9b6e7eb467cd1c6bb9aef9c35d191b5453",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -209,11 +167,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1763618868,
|
"lastModified": 1738136902,
|
||||||
"narHash": "sha256-v5afmLjn/uyD9EQuPBn7nZuaZVV9r+JerayK/4wvdWA=",
|
"narHash": "sha256-pUvLijVGARw4u793APze3j6mU1Zwdtz7hGkGGkD87qw=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "a8d610af3f1a5fb71e23e08434d8d61a466fc942",
|
"rev": "9a5db3142ce450045840cc8d832b13b8a2018e0c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -223,34 +181,18 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-unstable": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1768564909,
|
|
||||||
"narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768323494,
|
"lastModified": 1739758141,
|
||||||
"narHash": "sha256-yBXJLE6WCtrGo7LKiB6NOt6nisBEEkguC/lq/rP3zRQ=",
|
"narHash": "sha256-uq6A2L7o1/tR6VfmYhZWoVAwb3gTy7j4Jx30MIrH0rE=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "2c3e5ec5df46d3aeee2a1da0bfedd74e21f4bf3a",
|
"rev": "c618e28f70257593de75a7044438efc1c1fc0791",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-25.11",
|
"ref": "nixos-24.11",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -258,15 +200,27 @@
|
|||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"apple-silicon": "apple-silicon",
|
"apple-silicon": "apple-silicon",
|
||||||
"darwin": "darwin",
|
|
||||||
"disko": "disko",
|
"disko": "disko",
|
||||||
"firefox-addons": "firefox-addons",
|
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"nixos-generators": "nixos-generators",
|
"nixos-generators": "nixos-generators",
|
||||||
"nixpkgs": "nixpkgs_2",
|
"nixpkgs": "nixpkgs_2",
|
||||||
"nixpkgs-unstable": "nixpkgs-unstable",
|
"snowfall-lib": "snowfall-lib"
|
||||||
"snowfall-lib": "snowfall-lib",
|
}
|
||||||
"sops-nix": "sops-nix"
|
},
|
||||||
|
"rust-overlay": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1686795910,
|
||||||
|
"narHash": "sha256-jDa40qRZ0GRQtP9EMZdf+uCbvzuLnJglTUI2JoHfWDc=",
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"rev": "5c2b97c0a9bc5217fc3dfb1555aae0fb756d99f9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"snowfall-lib": {
|
"snowfall-lib": {
|
||||||
@@ -278,11 +232,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1765361626,
|
"lastModified": 1736130495,
|
||||||
"narHash": "sha256-kX0Dp/kYSRbQ+yd9e3lmmUWdNbipufvKfL2IzbrSpnY=",
|
"narHash": "sha256-4i9nAJEZFv7vZMmrE0YG55I3Ggrtfo5/T07JEpEZ/RM=",
|
||||||
"owner": "snowfallorg",
|
"owner": "snowfallorg",
|
||||||
"repo": "lib",
|
"repo": "lib",
|
||||||
"rev": "c566ad8b7352c30ec3763435de7c8f1c46ebb357",
|
"rev": "02d941739f98a09e81f3d2d9b3ab08918958beac",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -291,26 +245,6 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sops-nix": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1768481291,
|
|
||||||
"narHash": "sha256-NjKtkJraCZEnLHAJxLTI+BfdU//9coAz9p5TqveZwPU=",
|
|
||||||
"owner": "Mic92",
|
|
||||||
"repo": "sops-nix",
|
|
||||||
"rev": "e085e303dfcce21adcb5fec535d65aacb066f101",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "Mic92",
|
|
||||||
"repo": "sops-nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"systems": {
|
"systems": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1681028828,
|
"lastModified": 1681028828,
|
||||||
|
|||||||
151
flake.nix
Executable file → Normal file
151
flake.nix
Executable file → Normal file
@@ -2,80 +2,133 @@
|
|||||||
description = "NixOS Hosts";
|
description = "NixOS Hosts";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
|
||||||
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
||||||
disko.url = "github:nix-community/disko";
|
disko.url = "github:nix-community/disko";
|
||||||
snowfall-lib = {
|
snowfall-lib = {
|
||||||
url = "github:snowfallorg/lib";
|
url = "github:snowfallorg/lib";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager/release-25.11";
|
url = "github:nix-community/home-manager/release-24.11";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
apple-silicon = {
|
apple-silicon = {
|
||||||
url = "github:nix-community/nixos-apple-silicon";
|
url = "github:tpwrules/nixos-apple-silicon";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
nixos-generators = {
|
nixos-generators = {
|
||||||
url = "github:nix-community/nixos-generators";
|
url = "github:nix-community/nixos-generators";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
firefox-addons = {
|
|
||||||
url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
sops-nix = {
|
|
||||||
url = "github:Mic92/sops-nix";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
darwin = {
|
|
||||||
url = "github:nix-darwin/nix-darwin/nix-darwin-25.11";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs = inputs:
|
||||||
inputs:
|
|
||||||
inputs.snowfall-lib.mkFlake {
|
inputs.snowfall-lib.mkFlake {
|
||||||
inherit inputs;
|
inherit inputs;
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
|
||||||
snowfall = {
|
snowfall = {
|
||||||
namespace = "reichard";
|
|
||||||
meta = {
|
meta = {
|
||||||
title = "Reichard";
|
name = "reichardnix";
|
||||||
name = "reichard";
|
title = "ReichardNix";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace = "reichardnix";
|
||||||
};
|
};
|
||||||
|
|
||||||
channels-config = {
|
# home-manager.enable = true;
|
||||||
allowUnfree = true;
|
|
||||||
permittedInsecurePackages = [
|
|
||||||
"intel-ocl-5.0-63503"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs-builder = channels: {
|
|
||||||
devShells = {
|
|
||||||
default = import ./shells/default/default.nix { pkgs = channels.nixpkgs; };
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
homes.modules = with inputs; [
|
|
||||||
sops-nix.homeManagerModules.sops
|
|
||||||
];
|
|
||||||
|
|
||||||
systems.modules = {
|
|
||||||
nixos = with inputs; [
|
|
||||||
disko.nixosModules.disko
|
|
||||||
sops-nix.nixosModules.sops
|
|
||||||
./modules/nixos/common
|
|
||||||
];
|
|
||||||
darwin = with inputs; [
|
|
||||||
home-manager.darwinModules.home-manager
|
|
||||||
sops-nix.darwinModules.sops
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# outputs = { self, nixpkgs, disko, nixos-generators, apple-silicon }:
|
||||||
|
# let
|
||||||
|
# mkSystem = { systemConfig ? { }, moduleConfig }: nixpkgs.lib.nixosSystem {
|
||||||
|
# system = "x86_64-linux";
|
||||||
|
# modules = [
|
||||||
|
# disko.nixosModules.disko
|
||||||
|
# ./lib/disk-config.nix
|
||||||
|
# ./lib/common-system.nix
|
||||||
|
# systemConfig
|
||||||
|
# ({ ... }: moduleConfig)
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
# in
|
||||||
|
# {
|
||||||
|
# # NixOS Generators
|
||||||
|
# packages.x86_64-linux = {
|
||||||
|
# # RKE2
|
||||||
|
# rke2-image = nixos-generators.nixosGenerate {
|
||||||
|
# system = "x86_64-linux";
|
||||||
|
# format = "vmware";
|
||||||
|
# modules = [
|
||||||
|
# ./hosts/rke2-image.nix
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
|
||||||
|
# usb-image = nixos-generators.nixosGenerate {
|
||||||
|
# system = "x86_64-linux";
|
||||||
|
# format = "raw-efi";
|
||||||
|
# modules = [
|
||||||
|
# ./hosts/usb-image.nix
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
# # NixOS Configurations
|
||||||
|
# nixosConfigurations = {
|
||||||
|
# # MBP NixOS Asahi
|
||||||
|
# mpb-asahi = nixpkgs.lib.nixosSystem {
|
||||||
|
# system = "aarch64-linux";
|
||||||
|
# modules = [
|
||||||
|
# apple-silicon.nixosModules.default
|
||||||
|
# ./hosts/mbp-asahi.nix
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
|
||||||
|
# # Office Server (LLaMA / ADS-B)
|
||||||
|
# lin-va-office = mkSystem {
|
||||||
|
# systemConfig = ./hosts/office-server.nix;
|
||||||
|
# moduleConfig = {
|
||||||
|
# hostName = "lin-va-office";
|
||||||
|
# mainDiskID = "/dev/disk/by-id/ata-MTFDDAK512MBF-1AN1ZABHA_161212233628";
|
||||||
|
# network = {
|
||||||
|
# interface = "enp5s0";
|
||||||
|
# address = "10.0.50.120";
|
||||||
|
# defaultGateway = "10.0.50.254";
|
||||||
|
# nameservers = [ "10.0.50.254" ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
# # Utility Room Desktop
|
||||||
|
# lin-va-utility = mkSystem {
|
||||||
|
# systemConfig = ./hosts/utility-desktop.nix;
|
||||||
|
# moduleConfig = {
|
||||||
|
# hostName = "lin-va-utility";
|
||||||
|
# mainDiskID = "/dev/disk/by-id/nvme-eui.0026b768429d3eb5";
|
||||||
|
# network = {
|
||||||
|
# interface = "eno1";
|
||||||
|
# address = "10.0.20.50";
|
||||||
|
# defaultGateway = "10.0.20.254";
|
||||||
|
# nameservers = [ "10.0.20.254" ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
# # Nix Builder
|
||||||
|
# lin-va-nix-builder = mkSystem {
|
||||||
|
# systemConfig = ./hosts/builder.nix;
|
||||||
|
# moduleConfig = {
|
||||||
|
# hostName = "lin-va-nix-builder";
|
||||||
|
# mainDiskID = "/dev/xvda";
|
||||||
|
# enableXenGuest = true;
|
||||||
|
# network = {
|
||||||
|
# interface = "enX0";
|
||||||
|
# address = "10.0.50.130";
|
||||||
|
# defaultGateway = "10.0.50.254";
|
||||||
|
# nameservers = [ "10.0.50.254" ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|||||||
40
homes/aarch64-darwin/evanreichard@MBP-Personal/README.md
Normal file
40
homes/aarch64-darwin/evanreichard@MBP-Personal/README.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# Nix Home Manager Configuration
|
||||||
|
|
||||||
|
## Upgrade
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Update System Channels
|
||||||
|
sudo nix-channel --add https://nixos.org/channels/nixpkgs-24.11-darwin nixpkgs
|
||||||
|
sudo nix-channel --update
|
||||||
|
|
||||||
|
# Update Home Manager
|
||||||
|
nix-channel --add https://github.com/nix-community/home-manager/archive/release-24.11.tar.gz home-manager
|
||||||
|
nix-channel --update
|
||||||
|
|
||||||
|
# Link Repo
|
||||||
|
ln -s /Users/evanreichard/Development/git/personal/nix/home-manager ~/.config/home-manager
|
||||||
|
|
||||||
|
# Build Home Manager
|
||||||
|
home-manager switch
|
||||||
|
```
|
||||||
|
|
||||||
|
## Clean Garbage
|
||||||
|
|
||||||
|
NOTE: This will remove previous generations
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo nix-collect-garbage --delete-old
|
||||||
|
nix-collect-garbage --delete-old
|
||||||
|
```
|
||||||
|
|
||||||
|
## OS Update
|
||||||
|
|
||||||
|
`/etc/bashrc` may get overridden. To properly load Nix, prepend the following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Nix
|
||||||
|
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
|
||||||
|
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
|
||||||
|
fi
|
||||||
|
# End Nix
|
||||||
|
```
|
||||||
37
homes/aarch64-darwin/evanreichard@MBP-Personal/default.nix
Normal file
37
homes/aarch64-darwin/evanreichard@MBP-Personal/default.nix
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
reichardnix = {
|
||||||
|
programs.btop.enable = true;
|
||||||
|
programs.direnv.enable = true;
|
||||||
|
programs.ghostty.enable = true;
|
||||||
|
programs.git.enable = true;
|
||||||
|
programs.k9s.enable = true;
|
||||||
|
programs.nvim.enable = true;
|
||||||
|
|
||||||
|
programs.hyprland.enable = false;
|
||||||
|
programs.aws.enable = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Global Packages
|
||||||
|
programs.jq.enable = true;
|
||||||
|
programs.pandoc.enable = true;
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
android-tools
|
||||||
|
imagemagick
|
||||||
|
mosh
|
||||||
|
python311
|
||||||
|
texliveSmall # Pandoc PDF Dep
|
||||||
|
google-cloud-sdk
|
||||||
|
tldr
|
||||||
|
];
|
||||||
|
|
||||||
|
# SQLite Configuration
|
||||||
|
home.file.".sqliterc".text = ''
|
||||||
|
.headers on
|
||||||
|
.mode column
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Enable Home Manager & Self Manage
|
||||||
|
home.stateVersion = "24.11";
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
}
|
||||||
75
homes/aarch64-darwin/evanreichard@MBP-Work/default.nix
Normal file
75
homes/aarch64-darwin/evanreichard@MBP-Work/default.nix
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
let
|
||||||
|
inherit (pkgs.lib) mkForce;
|
||||||
|
inherit (pkgs.stdenv) isLinux;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
reichardnix = {
|
||||||
|
programs.nvim.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Home Manager Config
|
||||||
|
home.stateVersion = "24.11";
|
||||||
|
home.username = "evanreichard";
|
||||||
|
home.homeDirectory = mkForce (if isLinux then "/home/evanreichard" else "/Users/evanreichard");
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
|
||||||
|
# Global Packages
|
||||||
|
# home.packages = with pkgs; [
|
||||||
|
# (nerdfonts.override { fonts = [ "Meslo" ]; })
|
||||||
|
# # ghostty - Pending Darwin @ https://github.com/NixOS/nixpkgs/pull/369788
|
||||||
|
# android-tools
|
||||||
|
# awscli2
|
||||||
|
# bashInteractive
|
||||||
|
# cw
|
||||||
|
# fastfetch
|
||||||
|
# gitAndTools.gh
|
||||||
|
# google-cloud-sdk
|
||||||
|
# imagemagick
|
||||||
|
# kubectl
|
||||||
|
# kubernetes-helm
|
||||||
|
# mosh
|
||||||
|
# pre-commit
|
||||||
|
# python311
|
||||||
|
# ssm-session-manager-plugin
|
||||||
|
# texliveSmall # Pandoc PDF Dep
|
||||||
|
# thefuck
|
||||||
|
# tldr
|
||||||
|
# ]
|
||||||
|
# ++ optionals isLinux [
|
||||||
|
# ghostty
|
||||||
|
# hyprpaper
|
||||||
|
# firefox
|
||||||
|
# ]
|
||||||
|
# ++ optionals isDarwin [ ];
|
||||||
|
|
||||||
|
# # GitHub CLI
|
||||||
|
# programs.gh = {
|
||||||
|
# enable = true;
|
||||||
|
# settings = {
|
||||||
|
# git_protocol = "ssh";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
# # Misc Programs
|
||||||
|
# programs.jq.enable = true;
|
||||||
|
# programs.k9s.enable = true;
|
||||||
|
# programs.pandoc.enable = true;
|
||||||
|
|
||||||
|
# # Enable Flakes & Commands
|
||||||
|
# nix = {
|
||||||
|
# package = mkForce pkgs.nix;
|
||||||
|
# settings = {
|
||||||
|
# experimental-features = "nix-command flakes";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
# # SQLite Configuration
|
||||||
|
# home.file.".sqliterc".text = ''
|
||||||
|
# .headers on
|
||||||
|
# .mode column
|
||||||
|
# '';
|
||||||
|
|
||||||
|
# # Darwin Spotlight Indexing Hack
|
||||||
|
# disabledModules = [ "targets/darwin/linkapps.nix" ];
|
||||||
|
}
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
{ lib
|
|
||||||
, config
|
|
||||||
, namespace
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (lib.${namespace}) enabled;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.stateVersion = "25.11";
|
|
||||||
|
|
||||||
reichard = {
|
|
||||||
user = {
|
|
||||||
enable = true;
|
|
||||||
inherit (config.snowfallorg.user) name;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
graphical = {
|
|
||||||
ghostty = enabled;
|
|
||||||
ghidra = enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
terminal = {
|
|
||||||
btop = enabled;
|
|
||||||
direnv = enabled;
|
|
||||||
git = enabled;
|
|
||||||
k9s = enabled;
|
|
||||||
nvim = enabled;
|
|
||||||
opencode = enabled;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
security = {
|
|
||||||
sops = enabled;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
{ pkgs
|
|
||||||
, lib
|
|
||||||
, config
|
|
||||||
, namespace
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (lib.${namespace}) enabled;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.stateVersion = "25.11";
|
|
||||||
|
|
||||||
reichard = {
|
|
||||||
user = {
|
|
||||||
enable = true;
|
|
||||||
inherit (config.snowfallorg.user) name;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
graphical = {
|
|
||||||
ghostty = enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
terminal = {
|
|
||||||
aws = enabled;
|
|
||||||
btop = enabled;
|
|
||||||
claude-code = enabled;
|
|
||||||
direnv = enabled;
|
|
||||||
git = enabled;
|
|
||||||
k9s = enabled;
|
|
||||||
nvim = enabled;
|
|
||||||
opencode = enabled;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Global Packages
|
|
||||||
programs.jq = enabled;
|
|
||||||
programs.pandoc = enabled;
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
colima
|
|
||||||
docker
|
|
||||||
reichard.qwen-code
|
|
||||||
codex
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
{ pkgs
|
|
||||||
, lib
|
|
||||||
, config
|
|
||||||
, namespace
|
|
||||||
, osConfig
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (lib.${namespace}) enabled;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.stateVersion = "25.11";
|
|
||||||
|
|
||||||
reichard = {
|
|
||||||
user = {
|
|
||||||
enable = true;
|
|
||||||
inherit (config.snowfallorg.user) name;
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
|
||||||
ssh-agent = enabled;
|
|
||||||
fusuma = enabled;
|
|
||||||
swww = enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
security = {
|
|
||||||
sops = enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
graphical = {
|
|
||||||
wms.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
monitors = [
|
|
||||||
",highres,auto,2" # Optional - 1.68
|
|
||||||
];
|
|
||||||
};
|
|
||||||
ghostty = enabled;
|
|
||||||
ghidra = enabled;
|
|
||||||
browsers.firefox = {
|
|
||||||
enable = true;
|
|
||||||
gpuAcceleration = true;
|
|
||||||
hardwareDecoding = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
terminal = {
|
|
||||||
btop = enabled;
|
|
||||||
direnv = enabled;
|
|
||||||
git = enabled;
|
|
||||||
k9s = enabled;
|
|
||||||
nvim = enabled;
|
|
||||||
opencode = enabled;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
dconf = {
|
|
||||||
settings = {
|
|
||||||
"org/gnome/desktop/interface" = {
|
|
||||||
color-scheme = "prefer-dark";
|
|
||||||
cursor-theme = "catppuccin-macchiato-mauve-cursors";
|
|
||||||
cursor-size = 24;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.pointerCursor = {
|
|
||||||
gtk.enable = true;
|
|
||||||
name = "catppuccin-macchiato-mauve-cursors";
|
|
||||||
package = pkgs.catppuccin-cursors.macchiatoMauve;
|
|
||||||
size = 24;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Kubernetes Secrets
|
|
||||||
sops.secrets = lib.mkIf osConfig.${namespace}.security.sops.enable {
|
|
||||||
rke2_kubeconfig = {
|
|
||||||
path = "${config.home.homeDirectory}/.kube/rke2";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
{ lib
|
|
||||||
, config
|
|
||||||
, namespace
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (lib.${namespace}) enabled;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.stateVersion = "25.11";
|
|
||||||
|
|
||||||
reichard = {
|
|
||||||
user = {
|
|
||||||
enable = true;
|
|
||||||
inherit (config.snowfallorg.user) name;
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
|
||||||
ssh-agent = enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
terminal = {
|
|
||||||
bash = enabled;
|
|
||||||
btop = enabled;
|
|
||||||
direnv = enabled;
|
|
||||||
tmux = enabled;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
{ lib
|
|
||||||
, config
|
|
||||||
, namespace
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (lib.${namespace}) enabled;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.stateVersion = "25.11";
|
|
||||||
|
|
||||||
reichard = {
|
|
||||||
user = {
|
|
||||||
enable = true;
|
|
||||||
inherit (config.snowfallorg.user) name;
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
|
||||||
ssh-agent = enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
terminal = {
|
|
||||||
bash = enabled;
|
|
||||||
btop = enabled;
|
|
||||||
claude-code = enabled;
|
|
||||||
direnv = enabled;
|
|
||||||
git = enabled;
|
|
||||||
k9s = enabled;
|
|
||||||
nvim = enabled;
|
|
||||||
opencode = enabled;
|
|
||||||
tmux = enabled;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
{ pkgs
|
|
||||||
, lib
|
|
||||||
, config
|
|
||||||
, namespace
|
|
||||||
, osConfig
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (lib.${namespace}) enabled;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.stateVersion = "25.11";
|
|
||||||
|
|
||||||
reichard = {
|
|
||||||
user = {
|
|
||||||
enable = true;
|
|
||||||
inherit (config.snowfallorg.user) name;
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
|
||||||
ssh-agent = enabled;
|
|
||||||
fusuma = enabled;
|
|
||||||
swww = enabled;
|
|
||||||
poweralertd = enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
security = {
|
|
||||||
sops = enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
graphical = {
|
|
||||||
wms.hyprland = enabled;
|
|
||||||
ghostty = enabled;
|
|
||||||
strawberry = enabled;
|
|
||||||
gimp = enabled;
|
|
||||||
wireshark = enabled;
|
|
||||||
ghidra = enabled;
|
|
||||||
remmina = enabled;
|
|
||||||
browsers.firefox = {
|
|
||||||
enable = true;
|
|
||||||
gpuAcceleration = true;
|
|
||||||
hardwareDecoding = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
terminal = {
|
|
||||||
btop = enabled;
|
|
||||||
direnv = enabled;
|
|
||||||
git = enabled;
|
|
||||||
k9s = enabled;
|
|
||||||
nvim = enabled;
|
|
||||||
opencode = enabled;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
dconf = {
|
|
||||||
settings = {
|
|
||||||
"org/gnome/desktop/interface" = {
|
|
||||||
color-scheme = "prefer-dark";
|
|
||||||
cursor-theme = "catppuccin-macchiato-mauve-cursors";
|
|
||||||
cursor-size = 24;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.pointerCursor = {
|
|
||||||
gtk.enable = true;
|
|
||||||
name = "catppuccin-macchiato-mauve-cursors";
|
|
||||||
package = pkgs.catppuccin-cursors.macchiatoMauve;
|
|
||||||
size = 24;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Kubernetes Secrets
|
|
||||||
sops.secrets = lib.mkIf osConfig.${namespace}.security.sops.enable {
|
|
||||||
rke2_kubeconfig = {
|
|
||||||
path = "${config.home.homeDirectory}/.kube/rke2";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
{ pkgs
|
|
||||||
, lib
|
|
||||||
, config
|
|
||||||
, namespace
|
|
||||||
, osConfig
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (lib.${namespace}) enabled;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.stateVersion = "24.11";
|
|
||||||
|
|
||||||
reichard = {
|
|
||||||
user = {
|
|
||||||
enable = true;
|
|
||||||
inherit (config.snowfallorg.user) name;
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
|
||||||
ssh-agent = enabled;
|
|
||||||
fusuma = enabled;
|
|
||||||
swww = enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
security = {
|
|
||||||
sops = enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
graphical = {
|
|
||||||
wms.hyprland = enabled;
|
|
||||||
ghostty = enabled;
|
|
||||||
ghidra = enabled;
|
|
||||||
browsers.firefox = {
|
|
||||||
enable = true;
|
|
||||||
gpuAcceleration = true;
|
|
||||||
hardwareDecoding = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
terminal = {
|
|
||||||
btop = enabled;
|
|
||||||
direnv = enabled;
|
|
||||||
git = enabled;
|
|
||||||
k9s = enabled;
|
|
||||||
nvim = enabled;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
dconf = {
|
|
||||||
settings = {
|
|
||||||
"org/gnome/desktop/interface" = {
|
|
||||||
color-scheme = "prefer-dark";
|
|
||||||
cursor-theme = "catppuccin-macchiato-mauve-cursors";
|
|
||||||
cursor-size = 24;
|
|
||||||
# enable-hot-corners = false;
|
|
||||||
# font-name = osConfig.${namespace}.system.fonts.default;
|
|
||||||
# gtk-theme = cfg.theme.name;
|
|
||||||
# icon-theme = cfg.icon.name;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.pointerCursor = {
|
|
||||||
gtk.enable = true;
|
|
||||||
name = "catppuccin-macchiato-mauve-cursors";
|
|
||||||
package = pkgs.catppuccin-cursors.macchiatoMauve;
|
|
||||||
size = 24;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Kubernetes Secrets
|
|
||||||
sops.secrets = lib.mkIf osConfig.${namespace}.security.sops.enable {
|
|
||||||
rke2_kubeconfig = {
|
|
||||||
path = "${config.home.homeDirectory}/.kube/rke2";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
103
lib/common-system.nix
Normal file
103
lib/common-system.nix
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
{
|
||||||
|
# NixOS Config
|
||||||
|
options = {
|
||||||
|
hostName = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "The node hostname";
|
||||||
|
};
|
||||||
|
enableXenGuest = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "Whether to enable Xen guest support";
|
||||||
|
};
|
||||||
|
network = lib.mkOption {
|
||||||
|
type = lib.types.submodule {
|
||||||
|
options = {
|
||||||
|
interface = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Network interface name";
|
||||||
|
example = "enp0s3";
|
||||||
|
};
|
||||||
|
address = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Static IP address";
|
||||||
|
example = "10.0.20.200";
|
||||||
|
};
|
||||||
|
defaultGateway = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Default gateway IP";
|
||||||
|
example = "10.0.20.254";
|
||||||
|
};
|
||||||
|
nameservers = lib.mkOption {
|
||||||
|
type = lib.types.listOf lib.types.str;
|
||||||
|
description = "List of DNS servers";
|
||||||
|
example = [ "10.0.20.254" "8.8.8.8" ];
|
||||||
|
default = [ "8.8.8.8" "8.8.4.4" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
default = null;
|
||||||
|
description = "Network configuration";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkMerge [
|
||||||
|
{
|
||||||
|
# Basic System
|
||||||
|
system.stateVersion = "24.11";
|
||||||
|
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||||
|
networking.hostName = config.hostName;
|
||||||
|
|
||||||
|
# Boot Loader Options
|
||||||
|
boot.loader = {
|
||||||
|
systemd-boot.enable = true;
|
||||||
|
efi = {
|
||||||
|
canTouchEfiVariables = true;
|
||||||
|
efiSysMountPoint = "/boot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable SSH
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
PasswordAuthentication = false;
|
||||||
|
PermitRootLogin = "prohibit-password";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# User Authorized Keys
|
||||||
|
users.users.root = {
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIe1n9l9pVF5+kjWJCOt3AvBVf1HOSZkEDZxCWVPSIkr evan@reichard"
|
||||||
|
];
|
||||||
|
hashedPassword = null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
# Network Configuration
|
||||||
|
(lib.mkIf (config.network != null) {
|
||||||
|
networking = {
|
||||||
|
inherit (config.network) defaultGateway nameservers;
|
||||||
|
interfaces.${config.network.interface}.ipv4.addresses = [{
|
||||||
|
inherit (config.network) address;
|
||||||
|
prefixLength = 24;
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
})
|
||||||
|
|
||||||
|
# Xen Guest Configuration
|
||||||
|
(lib.mkIf config.enableXenGuest {
|
||||||
|
services.xe-guest-utilities.enable = true;
|
||||||
|
|
||||||
|
boot.initrd = {
|
||||||
|
availableKernelModules = [ "xen_blkfront" "xen_netfront" ];
|
||||||
|
kernelModules = [ "xen_netfront" "xen_blkfront" ];
|
||||||
|
supportedFilesystems = [ "ext4" "xenfs" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.kernelModules = [ "xen_netfront" "xen_blkfront" "xenfs" ];
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
||||||
43
lib/disk-config.nix
Normal file
43
lib/disk-config.nix
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{ config, lib, ... }: {
|
||||||
|
options = {
|
||||||
|
mainDiskID = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Device path for the main disk";
|
||||||
|
example = "/dev/disk/by-id/ata-VBOX_HARDDISK_VBcd9425b8-d666f9b8";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
disko.devices = {
|
||||||
|
disk = {
|
||||||
|
main = {
|
||||||
|
type = "disk";
|
||||||
|
device = config.mainDiskID;
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
boot = {
|
||||||
|
size = "512M";
|
||||||
|
type = "EF00";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
mountOptions = [ "umask=0077" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
root = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "ext4";
|
||||||
|
mountpoint = "/";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{ lib, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib) mkOption types;
|
|
||||||
in
|
|
||||||
rec {
|
|
||||||
mkOpt =
|
|
||||||
type: default: description:
|
|
||||||
mkOption { inherit type default description; };
|
|
||||||
|
|
||||||
mkBoolOpt = mkOpt types.bool;
|
|
||||||
|
|
||||||
enabled = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
disabled = {
|
|
||||||
enable = false;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
config = {
|
|
||||||
home-manager = {
|
|
||||||
useGlobalPkgs = true;
|
|
||||||
useUserPackages = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
{ config, lib, pkgs, inputs, namespace, host, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib) types mkIf;
|
|
||||||
inherit (lib.${namespace}) mkBoolOpt mkOpt;
|
|
||||||
|
|
||||||
cfg = config.${namespace}.nix;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.nix = {
|
|
||||||
enable = mkBoolOpt true "Whether or not to manage nix configuration.";
|
|
||||||
usingDeterminate = mkBoolOpt false "Whether we're using determinate nix";
|
|
||||||
package = mkOpt types.package pkgs.nixVersions.latest "Which nix package to use.";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
nix =
|
|
||||||
let
|
|
||||||
mappedRegistry = lib.pipe inputs [
|
|
||||||
(lib.filterAttrs (_: lib.isType "flake"))
|
|
||||||
(lib.mapAttrs (_: flake: { inherit flake; }))
|
|
||||||
(x: x // {
|
|
||||||
nixpkgs.flake = if pkgs.stdenv.hostPlatform.isLinux then inputs.nixpkgs else inputs.nixpkgs-unstable;
|
|
||||||
})
|
|
||||||
(x: if pkgs.stdenv.hostPlatform.isDarwin then lib.removeAttrs x [ "nixpkgs-unstable" ] else x)
|
|
||||||
];
|
|
||||||
users = [
|
|
||||||
"root"
|
|
||||||
"@wheel"
|
|
||||||
"nix-builder"
|
|
||||||
"evanreichard"
|
|
||||||
];
|
|
||||||
in
|
|
||||||
{
|
|
||||||
inherit (cfg) package;
|
|
||||||
|
|
||||||
buildMachines = lib.optional (config.${namespace}.security.sops.enable && host != "nixos-builder") {
|
|
||||||
hostName = "10.0.50.130";
|
|
||||||
systems = [ "x86_64-linux" ];
|
|
||||||
sshUser = "evanreichard";
|
|
||||||
protocol = "ssh";
|
|
||||||
sshKey = config.sops.secrets.builder_ssh_key.path;
|
|
||||||
supportedFeatures = [
|
|
||||||
"benchmark"
|
|
||||||
"big-parallel"
|
|
||||||
"nixos-test"
|
|
||||||
"kvm"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
checkConfig = true;
|
|
||||||
distributedBuilds = true;
|
|
||||||
optimise.automatic = !cfg.usingDeterminate;
|
|
||||||
registry = lib.mkForce mappedRegistry;
|
|
||||||
|
|
||||||
gc = {
|
|
||||||
automatic = !cfg.usingDeterminate;
|
|
||||||
options = "--delete-older-than 7d";
|
|
||||||
};
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
connect-timeout = 5;
|
|
||||||
allowed-users = users;
|
|
||||||
max-jobs = "auto";
|
|
||||||
auto-optimise-store = pkgs.stdenv.hostPlatform.isLinux;
|
|
||||||
builders-use-substitutes = true;
|
|
||||||
experimental-features = [
|
|
||||||
"nix-command"
|
|
||||||
"flakes "
|
|
||||||
];
|
|
||||||
flake-registry = "/etc/nix/registry.json";
|
|
||||||
http-connections = 50;
|
|
||||||
keep-derivations = true;
|
|
||||||
keep-going = true;
|
|
||||||
keep-outputs = true;
|
|
||||||
log-lines = 50;
|
|
||||||
sandbox = true;
|
|
||||||
trusted-users = users;
|
|
||||||
warn-dirty = false;
|
|
||||||
use-xdg-base-directories = true;
|
|
||||||
|
|
||||||
substituters = [
|
|
||||||
"https://anyrun.cachix.org"
|
|
||||||
"https://cache.nixos.org"
|
|
||||||
"https://hyprland.cachix.org"
|
|
||||||
"https://nix-community.cachix.org"
|
|
||||||
"https://nixpkgs-unfree.cachix.org"
|
|
||||||
"https://nixpkgs-wayland.cachix.org"
|
|
||||||
"https://numtide.cachix.org"
|
|
||||||
];
|
|
||||||
|
|
||||||
trusted-public-keys = [
|
|
||||||
"anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
|
|
||||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
|
||||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
|
||||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
|
||||||
"nixpkgs-unfree.cachix.org-1:hqvoInulhbV4nJ9yJOEr+4wxhDV4xq2d1DK7S6Nj6rs="
|
|
||||||
"nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
|
|
||||||
"numtide.cachix.org-1:2ps1kLBUWjxIneOy1Ik6cQjb41X0iXVXeHigGmycPPE="
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
{ config
|
|
||||||
, lib
|
|
||||||
, namespace
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (lib) mkIf mkEnableOption types;
|
|
||||||
inherit (lib.${namespace}) mkOpt;
|
|
||||||
getFile = lib.snowfall.fs.get-file;
|
|
||||||
|
|
||||||
user = config.users.users.${config.${namespace}.user.name};
|
|
||||||
cfg = config.${namespace}.security.sops;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.security.sops = with types; {
|
|
||||||
enable = mkEnableOption "Enable sops";
|
|
||||||
defaultSopsFile = mkOpt str "secrets/systems/${config.system.name}.yaml" "Default sops file.";
|
|
||||||
sshKeyPaths = mkOpt (listOf path) [ ] "Additional SSH key paths to use.";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
sops = {
|
|
||||||
defaultSopsFile = getFile cfg.defaultSopsFile;
|
|
||||||
|
|
||||||
age = {
|
|
||||||
keyFile = "${user.home}/.config/sops/age/keys.txt";
|
|
||||||
sshKeyPaths = [ "${config.home.homeDirectory}/.ssh/id_ed25519" ] ++ cfg.sshKeyPaths;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
sops.secrets.builder_ssh_key = {
|
|
||||||
sopsFile = getFile "secrets/common/systems.yaml";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{ config, namespace, lib, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib.${namespace}) mkOpt;
|
|
||||||
|
|
||||||
cfg = config.${namespace}.security.sops;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.services.openssh = with lib.types; {
|
|
||||||
enable = lib.mkEnableOption "OpenSSH support";
|
|
||||||
authorizedKeys = mkOpt (listOf str) [ ] "The public keys to apply.";
|
|
||||||
extraConfig = mkOpt str "" "Extra configuration to apply.";
|
|
||||||
port = mkOpt port 2222 "The port to listen on (in addition to 22).";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
services.openssh = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{ config, lib, namespace, pkgs, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib) types mkIf;
|
|
||||||
inherit (lib.${namespace}) mkOpt;
|
|
||||||
|
|
||||||
cfg = config.${namespace}.user;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.user = with types; {
|
|
||||||
name = mkOpt str "evanreichard" "The name to use for the user account.";
|
|
||||||
email = mkOpt str "evan@reichard.io" "The email of the user.";
|
|
||||||
fullName = mkOpt str "Evan Reichard" "The full name of the user.";
|
|
||||||
uid = mkOpt (types.nullOr types.int) 501 "The uid for the user account.";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
users.users.${cfg.name} = {
|
|
||||||
uid = mkIf (cfg.uid != null) cfg.uid;
|
|
||||||
shell = pkgs.bashInteractive;
|
|
||||||
home = "/Users/${cfg.name}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
7
modules/home/programs/terminal/aws/default.nix → modules/home/programs/aws/default.nix
Executable file → Normal file
7
modules/home/programs/terminal/aws/default.nix → modules/home/programs/aws/default.nix
Executable file → Normal file
@@ -1,18 +1,17 @@
|
|||||||
{ lib, pkgs, config, namespace, ... }:
|
{ lib, pkgs, config, namespace, ... }:
|
||||||
let
|
let
|
||||||
inherit (lib) mkIf;
|
inherit (lib) mkIf;
|
||||||
cfg = config.${namespace}.programs.terminal.aws;
|
cfg = config.${namespace}.programs.aws;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.${namespace}.programs.terminal.aws = {
|
options.${namespace}.programs.aws = {
|
||||||
enable = lib.mkEnableOption "AWS";
|
enable = lib.mkEnableOption "AWS";
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
aws-sso-util
|
|
||||||
awscli2
|
|
||||||
cw
|
cw
|
||||||
|
awscli2
|
||||||
ssm-session-manager-plugin
|
ssm-session-manager-plugin
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
0
modules/home/programs/terminal/btop/config/btop.conf → modules/home/programs/btop/config/btop.conf
Executable file → Normal file
0
modules/home/programs/terminal/btop/config/btop.conf → modules/home/programs/btop/config/btop.conf
Executable file → Normal file
0
modules/home/programs/terminal/btop/config/catppuccin_mocha.theme → modules/home/programs/btop/config/catppuccin_mocha.theme
Executable file → Normal file
0
modules/home/programs/terminal/btop/config/catppuccin_mocha.theme → modules/home/programs/btop/config/catppuccin_mocha.theme
Executable file → Normal file
19
modules/home/programs/btop/default.nix
Normal file
19
modules/home/programs/btop/default.nix
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{ lib, config, namespace, ... }:
|
||||||
|
let
|
||||||
|
inherit (lib) mkIf;
|
||||||
|
cfg = config.${namespace}.programs.btop;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.${namespace}.programs.btop = {
|
||||||
|
enable = lib.mkEnableOption "btop";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
programs.btop.enable = true;
|
||||||
|
|
||||||
|
home.file.".config/btop/btop.conf".text =
|
||||||
|
builtins.readFile ./config/btop.conf;
|
||||||
|
home.file.".config/btop/themes/catppuccin_mocha.theme".text =
|
||||||
|
builtins.readFile ./config/catppuccin_mocha.theme;
|
||||||
|
};
|
||||||
|
}
|
||||||
4
modules/home/programs/terminal/direnv/default.nix → modules/home/programs/direnv/default.nix
Executable file → Normal file
4
modules/home/programs/terminal/direnv/default.nix → modules/home/programs/direnv/default.nix
Executable file → Normal file
@@ -1,10 +1,10 @@
|
|||||||
{ lib, config, namespace, ... }:
|
{ lib, config, namespace, ... }:
|
||||||
let
|
let
|
||||||
inherit (lib) mkIf;
|
inherit (lib) mkIf;
|
||||||
cfg = config.${namespace}.programs.terminal.direnv;
|
cfg = config.${namespace}.programs.direnv;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.${namespace}.programs.terminal.direnv = {
|
options.${namespace}.programs.direnv = {
|
||||||
enable = lib.mkEnableOption "direnv";
|
enable = lib.mkEnableOption "direnv";
|
||||||
};
|
};
|
||||||
|
|
||||||
0
modules/home/programs/terminal/bash/config/fastfetch.jsonc → modules/home/programs/ghostty/config/fastfetch.jsonc
Executable file → Normal file
0
modules/home/programs/terminal/bash/config/fastfetch.jsonc → modules/home/programs/ghostty/config/fastfetch.jsonc
Executable file → Normal file
@@ -1,3 +1,8 @@
|
|||||||
|
command = @BASH_PATH@ --login
|
||||||
|
macos-titlebar-style = tabs
|
||||||
|
auto-update = off
|
||||||
|
font-family = "MesloLGM Nerd Font Mono"
|
||||||
|
|
||||||
# Melange Dark - Adapted From: https://github.com/savq/melange-nvim/blob/master/term/kitty/melange_dark.conf
|
# Melange Dark - Adapted From: https://github.com/savq/melange-nvim/blob/master/term/kitty/melange_dark.conf
|
||||||
palette = 0=#34302C
|
palette = 0=#34302C
|
||||||
palette = 1=#BD8183
|
palette = 1=#BD8183
|
||||||
55
modules/home/programs/terminal/bash/default.nix → modules/home/programs/ghostty/default.nix
Executable file → Normal file
55
modules/home/programs/terminal/bash/default.nix → modules/home/programs/ghostty/default.nix
Executable file → Normal file
@@ -1,17 +1,11 @@
|
|||||||
{ pkgs
|
{ pkgs, lib, config, namespace, ... }:
|
||||||
, lib
|
|
||||||
, config
|
|
||||||
, namespace
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
let
|
||||||
inherit (lib) mkIf optionalAttrs;
|
inherit (lib) mkIf;
|
||||||
inherit (pkgs.stdenv) isLinux isDarwin;
|
cfg = config.${namespace}.programs.ghostty;
|
||||||
cfg = config.${namespace}.programs.terminal.bash;
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.${namespace}.programs.terminal.bash = {
|
options.${namespace}.programs.ghostty = {
|
||||||
enable = lib.mkEnableOption "bash";
|
enable = lib.mkEnableOption "Ghostty";
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
@@ -20,28 +14,15 @@ in
|
|||||||
shellAliases = {
|
shellAliases = {
|
||||||
grep = "grep --color";
|
grep = "grep --color";
|
||||||
ssh = "TERM=xterm-256color ssh";
|
ssh = "TERM=xterm-256color ssh";
|
||||||
}
|
flush_dns = "sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder";
|
||||||
// optionalAttrs isLinux {
|
|
||||||
sync-watch = "watch -d grep -e Dirty: -e Writeback: /proc/meminfo";
|
|
||||||
}
|
|
||||||
// optionalAttrs isDarwin {
|
|
||||||
mosh = "mosh --ssh=\"/usr/bin/ssh\"";
|
|
||||||
};
|
};
|
||||||
profileExtra = ''
|
profileExtra = ''
|
||||||
export COLORTERM=truecolor
|
|
||||||
SHELL="$BASH"
|
SHELL="$BASH"
|
||||||
PATH=~/.bin:$PATH
|
PATH=~/.bin:$PATH
|
||||||
|
eval "$(thefuck --alias)"
|
||||||
|
set -o vi
|
||||||
bind "set show-mode-in-prompt on"
|
bind "set show-mode-in-prompt on"
|
||||||
|
fastfetch
|
||||||
set -o vi || true
|
|
||||||
VISUAL=vim
|
|
||||||
EDITOR="$VISUAL"
|
|
||||||
|
|
||||||
if [ -z "$CLAUDE_CODE_ENTRYPOINT" ]; then
|
|
||||||
fastfetch
|
|
||||||
fi
|
|
||||||
|
|
||||||
[[ -f ~/.bash_custom ]] && . ~/.bash_custom
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -70,13 +51,23 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
bashInteractive
|
# Pending Darwin @ https://github.com/NixOS/nixpkgs/pull/369788
|
||||||
|
# ghostty
|
||||||
|
thefuck
|
||||||
fastfetch
|
fastfetch
|
||||||
mosh
|
bashInteractive
|
||||||
nerd-fonts.meslo-lg
|
(nerdfonts.override { fonts = [ "Meslo" ]; })
|
||||||
];
|
];
|
||||||
|
|
||||||
home.file.".config/fastfetch/config.jsonc".text = builtins.readFile ./config/fastfetch.jsonc;
|
home.file.".config/fastfetch/config.jsonc".text = builtins.readFile ./config/fastfetch.jsonc;
|
||||||
home.file.".sqliterc".text = builtins.readFile ./config/.sqliterc;
|
home.file.".config/ghostty/config".text =
|
||||||
|
let
|
||||||
|
bashPath = "${pkgs.bashInteractive}/bin/bash";
|
||||||
|
in
|
||||||
|
builtins.replaceStrings
|
||||||
|
[ "@BASH_PATH@" ]
|
||||||
|
[ bashPath ]
|
||||||
|
(builtins.readFile ./config/ghostty.conf);
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
0
modules/home/programs/terminal/bash/config/.gitignore → modules/home/programs/git/config/.gitignore
vendored
Executable file → Normal file
0
modules/home/programs/terminal/bash/config/.gitignore → modules/home/programs/git/config/.gitignore
vendored
Executable file → Normal file
0
modules/home/programs/terminal/git/config/personal → modules/home/programs/git/config/personal
Executable file → Normal file
0
modules/home/programs/terminal/git/config/personal → modules/home/programs/git/config/personal
Executable file → Normal file
0
modules/home/programs/terminal/git/config/work → modules/home/programs/git/config/work
Executable file → Normal file
0
modules/home/programs/terminal/git/config/work → modules/home/programs/git/config/work
Executable file → Normal file
49
modules/home/programs/terminal/git/default.nix → modules/home/programs/git/default.nix
Executable file → Normal file
49
modules/home/programs/terminal/git/default.nix → modules/home/programs/git/default.nix
Executable file → Normal file
@@ -1,29 +1,31 @@
|
|||||||
{ pkgs
|
{ pkgs, lib, config, namespace, ... }:
|
||||||
, lib
|
|
||||||
, config
|
|
||||||
, namespace
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
let
|
||||||
inherit (lib) mkIf;
|
inherit (lib) mkIf;
|
||||||
cfg = config.${namespace}.programs.terminal.git;
|
cfg = config.${namespace}.programs.git;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.${namespace}.programs.terminal.git = {
|
options.${namespace}.programs.git = {
|
||||||
enable = lib.mkEnableOption "Git";
|
enable = lib.mkEnableOption "Git";
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
userName = "Evan Reichard";
|
||||||
aliases = {
|
aliases = {
|
||||||
lg = "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all -n 15";
|
lg = "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all -n 15";
|
||||||
};
|
};
|
||||||
user = {
|
includes = [
|
||||||
name = "Evan Reichard";
|
{
|
||||||
email = "evan@reichard.io";
|
path = "~/.config/git/work";
|
||||||
};
|
condition = "gitdir:~/Development/git/work/";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
path = "~/.config/git/personal";
|
||||||
|
condition = "gitdir:~/Development/git/personal/";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
extraConfig = {
|
||||||
core = {
|
core = {
|
||||||
autocrlf = "input";
|
autocrlf = "input";
|
||||||
safecrlf = "true";
|
safecrlf = "true";
|
||||||
@@ -68,16 +70,6 @@ in
|
|||||||
autoSetupRemote = true;
|
autoSetupRemote = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
includes = [
|
|
||||||
{
|
|
||||||
path = "~/.config/git/work";
|
|
||||||
condition = "gitdir:~/Development/git/work/";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
path = "~/.config/git/personal";
|
|
||||||
condition = "gitdir:~/Development/git/personal/";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.gh = {
|
programs.gh = {
|
||||||
@@ -87,7 +79,10 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
home.packages = with pkgs; [ gh ];
|
home.packages = with pkgs; [
|
||||||
|
gitAndTools.gh
|
||||||
|
pre-commit
|
||||||
|
];
|
||||||
|
|
||||||
# Copy Configuration
|
# Copy Configuration
|
||||||
xdg.configFile = {
|
xdg.configFile = {
|
||||||
@@ -1,121 +0,0 @@
|
|||||||
{ config, lib, pkgs, namespace, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib)
|
|
||||||
types
|
|
||||||
mkIf
|
|
||||||
mkMerge
|
|
||||||
optionalAttrs
|
|
||||||
;
|
|
||||||
inherit (lib.${namespace}) mkBoolOpt mkOpt;
|
|
||||||
|
|
||||||
cfg = config.${namespace}.programs.graphical.browsers.firefox;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = lib.snowfall.fs.get-non-default-nix-files ./.;
|
|
||||||
|
|
||||||
options.${namespace}.programs.graphical.browsers.firefox = with types; {
|
|
||||||
enable = lib.mkEnableOption "Firefox";
|
|
||||||
|
|
||||||
extraConfig = mkOpt str "" "Extra configuration for the user profile JS file.";
|
|
||||||
gpuAcceleration = mkBoolOpt false "Enable GPU acceleration.";
|
|
||||||
hardwareDecoding = mkBoolOpt false "Enable hardware video decoding.";
|
|
||||||
|
|
||||||
policies = mkOpt attrs
|
|
||||||
{
|
|
||||||
CaptivePortal = false;
|
|
||||||
DisableFirefoxStudies = true;
|
|
||||||
DisableFormHistory = true;
|
|
||||||
DisablePocket = true;
|
|
||||||
DisableTelemetry = true;
|
|
||||||
DisplayBookmarksToolbar = false;
|
|
||||||
DontCheckDefaultBrowser = true;
|
|
||||||
FirefoxHome = {
|
|
||||||
Pocket = false;
|
|
||||||
Snippets = false;
|
|
||||||
};
|
|
||||||
PasswordManagerEnabled = false;
|
|
||||||
UserMessaging = {
|
|
||||||
ExtensionRecommendations = false;
|
|
||||||
SkipOnboarding = true;
|
|
||||||
};
|
|
||||||
GenerativeAI = {
|
|
||||||
Chatbot = false;
|
|
||||||
LinkPreviews = false;
|
|
||||||
TabGroups = false;
|
|
||||||
Locked = false;
|
|
||||||
};
|
|
||||||
ExtensionSettings = {
|
|
||||||
# Block All
|
|
||||||
# "*".installation_mode = "blocked";
|
|
||||||
|
|
||||||
# Bypass Paywalls
|
|
||||||
"magnolia@12.34" = {
|
|
||||||
install_url = "https://gitflic.ru/project/magnolia1234/bpc_uploads/blob/raw?file=bypass_paywalls_clean-latest.xpi";
|
|
||||||
installation_mode = "force_installed";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
Preferences = { };
|
|
||||||
} "Policies to apply to firefox";
|
|
||||||
|
|
||||||
settings = mkOpt attrs { } "Settings to apply to the profile.";
|
|
||||||
|
|
||||||
extensions.packages = mkOpt (with lib.types; listOf package)
|
|
||||||
(with pkgs.firefox-addons; [
|
|
||||||
bitwarden
|
|
||||||
darkreader
|
|
||||||
gruvbox-dark-theme
|
|
||||||
kagi-search
|
|
||||||
sponsorblock
|
|
||||||
ublock-origin
|
|
||||||
|
|
||||||
# bypass-paywalls-clean
|
|
||||||
]) "Extensions to install";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.firefox = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
inherit (cfg) policies;
|
|
||||||
|
|
||||||
profiles = {
|
|
||||||
${config.${namespace}.user.name} = {
|
|
||||||
inherit (cfg) extraConfig extensions;
|
|
||||||
inherit (config.${namespace}.user) name;
|
|
||||||
|
|
||||||
id = 0;
|
|
||||||
|
|
||||||
settings = mkMerge [
|
|
||||||
cfg.settings
|
|
||||||
{
|
|
||||||
"browser.aboutConfig.showWarning" = false;
|
|
||||||
"browser.aboutwelcome.enabled" = false;
|
|
||||||
"browser.sessionstore.warnOnQuit" = true;
|
|
||||||
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
|
|
||||||
"browser.shell.checkDefaultBrowser" = false;
|
|
||||||
"general.smoothScroll.msdPhysics.enabled" = true;
|
|
||||||
"intl.accept_languages" = "en-US,en";
|
|
||||||
"ui.key.accelKey" = "224";
|
|
||||||
|
|
||||||
# "devtools.chrome.enabled" = true;
|
|
||||||
# "xpinstall.signatures.required" = false;
|
|
||||||
}
|
|
||||||
(optionalAttrs cfg.gpuAcceleration {
|
|
||||||
"dom.webgpu.enabled" = true;
|
|
||||||
"gfx.webrender.all" = true;
|
|
||||||
"layers.gpu-process.enabled" = true;
|
|
||||||
"layers.mlgpu.enabled" = true;
|
|
||||||
})
|
|
||||||
(optionalAttrs cfg.hardwareDecoding {
|
|
||||||
"media.ffmpeg.vaapi.enabled" = true;
|
|
||||||
"media.gpu-process-decoder" = true;
|
|
||||||
"media.hardware-video-decoding.enabled" = true;
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
# userChrome = ./chrome/userChrome.css;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{ pkgs, lib, config, namespace, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib) mkIf mkEnableOption;
|
|
||||||
cfg = config.${namespace}.programs.graphical.ghidra;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.programs.graphical.ghidra = {
|
|
||||||
enable = mkEnableOption "Enable Ghidra";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
home.packages = with pkgs; [ ghidra ];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# https://github.com/catppuccin/ghostty/blob/main/themes/catppuccin-macchiato.conf
|
|
||||||
palette = 0=#494d64
|
|
||||||
palette = 1=#ed8796
|
|
||||||
palette = 2=#a6da95
|
|
||||||
palette = 3=#eed49f
|
|
||||||
palette = 4=#8aadf4
|
|
||||||
palette = 5=#f5bde6
|
|
||||||
palette = 6=#8bd5ca
|
|
||||||
palette = 7=#b8c0e0
|
|
||||||
palette = 8=#5b6078
|
|
||||||
palette = 9=#ed8796
|
|
||||||
palette = 10=#a6da95
|
|
||||||
palette = 11=#eed49f
|
|
||||||
palette = 12=#8aadf4
|
|
||||||
palette = 13=#f5bde6
|
|
||||||
palette = 14=#8bd5ca
|
|
||||||
palette = 15=#a5adcb
|
|
||||||
background = 24273a
|
|
||||||
foreground = cad3f5
|
|
||||||
cursor-color = f4dbd6
|
|
||||||
cursor-text = 24273a
|
|
||||||
selection-background = 3a3e53
|
|
||||||
selection-foreground = cad3f5
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# https://github.com/catppuccin/ghostty/blob/main/themes/catppuccin-mocha.conf
|
|
||||||
palette = 0=#45475a
|
|
||||||
palette = 1=#f38ba8
|
|
||||||
palette = 2=#a6e3a1
|
|
||||||
palette = 3=#f9e2af
|
|
||||||
palette = 4=#89b4fa
|
|
||||||
palette = 5=#f5c2e7
|
|
||||||
palette = 6=#94e2d5
|
|
||||||
palette = 7=#bac2de
|
|
||||||
palette = 8=#585b70
|
|
||||||
palette = 9=#f38ba8
|
|
||||||
palette = 10=#a6e3a1
|
|
||||||
palette = 11=#f9e2af
|
|
||||||
palette = 12=#89b4fa
|
|
||||||
palette = 13=#f5c2e7
|
|
||||||
palette = 14=#94e2d5
|
|
||||||
palette = 15=#a6adc8
|
|
||||||
background = 1e1e2e
|
|
||||||
foreground = cdd6f4
|
|
||||||
cursor-color = f5e0dc
|
|
||||||
cursor-text = 1e1e2e
|
|
||||||
selection-background = 353749
|
|
||||||
selection-foreground = cdd6f4
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
command = @BASH_PATH@ --login
|
|
||||||
macos-titlebar-style = tabs
|
|
||||||
auto-update = off
|
|
||||||
font-family = "MesloLGM Nerd Font Mono"
|
|
||||||
confirm-close-surface = true
|
|
||||||
|
|
||||||
# Keybindings - Tabs & Splits
|
|
||||||
keybind = cmd+t=new_tab
|
|
||||||
keybind = cmd+w=close_surface
|
|
||||||
keybind = cmd+d=new_split:right
|
|
||||||
keybind = cmd+shift+d=new_split:down
|
|
||||||
keybind = cmd+shift+enter=toggle_split_zoom
|
|
||||||
|
|
||||||
# Keybindings - Navigation - Splits
|
|
||||||
keybind = cmd+left=goto_split:left
|
|
||||||
keybind = cmd+right=goto_split:right
|
|
||||||
keybind = cmd+up=goto_split:up
|
|
||||||
keybind = cmd+down=goto_split:down
|
|
||||||
keybind = cmd+]=goto_split:next
|
|
||||||
keybind = cmd+[=goto_split:previous
|
|
||||||
|
|
||||||
# Keybindings - Navigation - Tabs
|
|
||||||
keybind = cmd+1=goto_tab:1
|
|
||||||
keybind = cmd+2=goto_tab:2
|
|
||||||
keybind = cmd+3=goto_tab:3
|
|
||||||
keybind = cmd+4=goto_tab:4
|
|
||||||
keybind = cmd+5=goto_tab:5
|
|
||||||
keybind = cmd+6=goto_tab:6
|
|
||||||
keybind = cmd+7=goto_tab:7
|
|
||||||
keybind = cmd+8=goto_tab:8
|
|
||||||
keybind = cmd+9=goto_tab:9
|
|
||||||
|
|
||||||
keybind = performable:cmd+c=copy_to_clipboard
|
|
||||||
keybind = performable:cmd+v=paste_from_clipboard
|
|
||||||
|
|
||||||
# https://github.com/catppuccin/ghostty/blob/main/themes/catppuccin-mocha.conf
|
|
||||||
palette = 0=#45475a
|
|
||||||
palette = 1=#f38ba8
|
|
||||||
palette = 2=#a6e3a1
|
|
||||||
palette = 3=#f9e2af
|
|
||||||
palette = 4=#89b4fa
|
|
||||||
palette = 5=#f5c2e7
|
|
||||||
palette = 6=#94e2d5
|
|
||||||
palette = 7=#bac2de
|
|
||||||
palette = 8=#585b70
|
|
||||||
palette = 9=#f38ba8
|
|
||||||
palette = 10=#a6e3a1
|
|
||||||
palette = 11=#f9e2af
|
|
||||||
palette = 12=#89b4fa
|
|
||||||
palette = 13=#f5c2e7
|
|
||||||
palette = 14=#94e2d5
|
|
||||||
palette = 15=#a6adc8
|
|
||||||
background = 1e1e2e
|
|
||||||
foreground = cdd6f4
|
|
||||||
cursor-color = f5e0dc
|
|
||||||
cursor-text = 1e1e2e
|
|
||||||
selection-background = 353749
|
|
||||||
selection-foreground = cdd6f4
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{ pkgs, lib, config, namespace, ... }:
|
|
||||||
let
|
|
||||||
inherit (pkgs.stdenv) isLinux;
|
|
||||||
inherit (lib) mkIf mkEnableOption optionals;
|
|
||||||
cfg = config.${namespace}.programs.graphical.ghostty;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.programs.graphical.ghostty = {
|
|
||||||
enable = mkEnableOption "Ghostty";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
# Enable Bash
|
|
||||||
${namespace}.programs.terminal.bash.enable = true;
|
|
||||||
|
|
||||||
# Pending Darwin @ https://github.com/NixOS/nixpkgs/pull/369788
|
|
||||||
home.packages = with pkgs; optionals isLinux [
|
|
||||||
ghostty
|
|
||||||
];
|
|
||||||
|
|
||||||
home.file.".config/ghostty/config".text =
|
|
||||||
let
|
|
||||||
bashPath = "${pkgs.bashInteractive}/bin/bash";
|
|
||||||
in
|
|
||||||
builtins.replaceStrings
|
|
||||||
[ "@BASH_PATH@" ]
|
|
||||||
[ bashPath ]
|
|
||||||
(builtins.readFile ./config/ghostty.conf);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{ pkgs, lib, config, namespace, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib) mkIf mkEnableOption;
|
|
||||||
|
|
||||||
cfg = config.${namespace}.programs.graphical.gimp;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.programs.graphical.gimp = {
|
|
||||||
enable = mkEnableOption "GIMP";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
gimp-with-plugins
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{ pkgs, lib, config, namespace, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib) mkIf mkEnableOption;
|
|
||||||
|
|
||||||
cfg = config.${namespace}.programs.graphical.remmina;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.programs.graphical.remmina = {
|
|
||||||
enable = mkEnableOption "Remmina";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
remmina
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{ pkgs, lib, config, namespace, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib) mkIf mkEnableOption;
|
|
||||||
cfg = config.${namespace}.programs.graphical.strawberry;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.programs.graphical.strawberry = {
|
|
||||||
enable = mkEnableOption "Enable Strawberry";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
strawberry
|
|
||||||
libgpod
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{ pkgs, lib, config, namespace, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib) mkIf mkEnableOption;
|
|
||||||
|
|
||||||
cfg = config.${namespace}.programs.graphical.wireshark;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.programs.graphical.wireshark = {
|
|
||||||
enable = mkEnableOption "Wireshark";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
wireshark
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,155 +0,0 @@
|
|||||||
exec-once = uwsm app -- waybar
|
|
||||||
exec-once = uwsm app -- $terminal
|
|
||||||
exec-once = uwsm app -- firefox
|
|
||||||
|
|
||||||
general {
|
|
||||||
gaps_in = 5
|
|
||||||
gaps_out = 12
|
|
||||||
|
|
||||||
border_size = 2
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
|
|
||||||
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
|
|
||||||
col.inactive_border = rgba(595959aa)
|
|
||||||
|
|
||||||
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
|
||||||
resize_on_border = false
|
|
||||||
|
|
||||||
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
|
||||||
allow_tearing = false
|
|
||||||
|
|
||||||
layout = dwindle
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
|
||||||
decoration {
|
|
||||||
rounding = 10
|
|
||||||
|
|
||||||
active_opacity = 1.0
|
|
||||||
inactive_opacity = 1.0
|
|
||||||
|
|
||||||
shadow {
|
|
||||||
enabled = true
|
|
||||||
range = 4
|
|
||||||
render_power = 3
|
|
||||||
color = rgba(1a1a1aee)
|
|
||||||
}
|
|
||||||
|
|
||||||
blur {
|
|
||||||
enabled = true
|
|
||||||
size = 3
|
|
||||||
passes = 1
|
|
||||||
vibrancy = 0.1696
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
|
||||||
#https://wiki.hyprland.org/Configuring/Animations/
|
|
||||||
animations {
|
|
||||||
enabled = yes, please :)
|
|
||||||
|
|
||||||
|
|
||||||
bezier = easeOutQuint,0.23,1,0.32,1
|
|
||||||
bezier = easeInOutCubic,0.65,0.05,0.36,1
|
|
||||||
bezier = linear,0,0,1,1
|
|
||||||
bezier = almostLinear,0.5,0.5,0.75,1.0
|
|
||||||
bezier = quick,0.15,0,0.1,1
|
|
||||||
|
|
||||||
animation = global, 1, 10, default
|
|
||||||
animation = border, 1, 5.39, easeOutQuint
|
|
||||||
animation = windows, 1, 4.79, easeOutQuint
|
|
||||||
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
|
||||||
animation = windowsOut, 1, 1.49, linear, popin 87%
|
|
||||||
animation = fadeIn, 1, 1.73, almostLinear
|
|
||||||
animation = fadeOut, 1, 1.46, almostLinear
|
|
||||||
animation = fade, 1, 3.03, quick
|
|
||||||
animation = layers, 1, 3.81, easeOutQuint
|
|
||||||
animation = layersIn, 1, 4, easeOutQuint, fade
|
|
||||||
animation = layersOut, 1, 1.5, linear, fade
|
|
||||||
animation = fadeLayersIn, 1, 1.79, almostLinear
|
|
||||||
animation = fadeLayersOut, 1, 1.39, almostLinear
|
|
||||||
animation = workspaces, 1, 1.94, almostLinear, fade
|
|
||||||
animation = workspacesIn, 1, 1.21, almostLinear, fade
|
|
||||||
animation = workspacesOut, 1, 1.94, almostLinear, fade
|
|
||||||
}
|
|
||||||
|
|
||||||
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
|
|
||||||
# "Smart gaps" / "No gaps when only"
|
|
||||||
# uncomment all if you wish to use that.
|
|
||||||
# workspace = w[tv1], gapsout:0, gapsin:0
|
|
||||||
# workspace = f[1], gapsout:0, gapsin:0
|
|
||||||
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1]
|
|
||||||
# windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1]
|
|
||||||
# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
|
|
||||||
# windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
|
||||||
dwindle {
|
|
||||||
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
|
||||||
preserve_split = true # You probably want this
|
|
||||||
}
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
|
||||||
master {
|
|
||||||
new_status = master
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
|
||||||
misc {
|
|
||||||
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
|
||||||
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#############
|
|
||||||
### INPUT ###
|
|
||||||
#############
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#input
|
|
||||||
input {
|
|
||||||
kb_layout = us
|
|
||||||
kb_variant =
|
|
||||||
kb_model =
|
|
||||||
kb_options =
|
|
||||||
kb_rules =
|
|
||||||
|
|
||||||
follow_mouse = 1
|
|
||||||
|
|
||||||
sensitivity = 0.0 # -1.0 - 1.0, 0 means no modification.
|
|
||||||
|
|
||||||
touchpad {
|
|
||||||
scroll_factor = 0.5
|
|
||||||
disable_while_typing = true
|
|
||||||
natural_scroll = true
|
|
||||||
clickfinger_behavior = true
|
|
||||||
tap-to-click = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#gestures
|
|
||||||
gesture = 4, horizontal, workspace, invert
|
|
||||||
|
|
||||||
# Thinkpad Trackpoint
|
|
||||||
device {
|
|
||||||
name = tpps/2-elan-trackpoint
|
|
||||||
sensitivity = -0.3
|
|
||||||
}
|
|
||||||
|
|
||||||
##############################
|
|
||||||
### WINDOWS AND WORKSPACES ###
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
|
||||||
|
|
||||||
# Example windowrule v1
|
|
||||||
# windowrule = float, ^(kitty)$
|
|
||||||
|
|
||||||
# Example windowrule v2
|
|
||||||
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
|
|
||||||
|
|
||||||
# Ignore maximize requests from apps. You'll probably like this.
|
|
||||||
windowrulev2 = suppressevent maximize, class:.*
|
|
||||||
|
|
||||||
# Fix some dragging issues with XWayland
|
|
||||||
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
|
||||||
@@ -1,146 +0,0 @@
|
|||||||
@define-color rosewater #f5e0dc;
|
|
||||||
@define-color flamingo #f2cdcd;
|
|
||||||
@define-color pink #f5c2e7;
|
|
||||||
@define-color mauve #cba6f7;
|
|
||||||
@define-color red #f38ba8;
|
|
||||||
@define-color maroon #eba0ac;
|
|
||||||
@define-color peach #fab387;
|
|
||||||
@define-color yellow #f9e2af;
|
|
||||||
@define-color green #a6e3a1;
|
|
||||||
@define-color teal #94e2d5;
|
|
||||||
@define-color sky #89dceb;
|
|
||||||
@define-color sapphire #74c7ec;
|
|
||||||
@define-color blue #89b4fa;
|
|
||||||
@define-color lavender #b4befe;
|
|
||||||
@define-color text #cdd6f4;
|
|
||||||
@define-color subtext1 #bac2de;
|
|
||||||
@define-color subtext0 #a6adc8;
|
|
||||||
@define-color overlay2 #9399b2;
|
|
||||||
@define-color overlay1 #7f849c;
|
|
||||||
@define-color overlay0 #6c7086;
|
|
||||||
@define-color surface2 #585b70;
|
|
||||||
@define-color surface1 #45475a;
|
|
||||||
@define-color surface0 #313244;
|
|
||||||
@define-color base #1e1e2e;
|
|
||||||
@define-color mantle #181825;
|
|
||||||
@define-color crust #11111b;
|
|
||||||
|
|
||||||
/* Common Styles */
|
|
||||||
* {
|
|
||||||
font-family: FantasqueSansMono Nerd Font;
|
|
||||||
font-size: 14px;
|
|
||||||
min-height: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Primary Waybar */
|
|
||||||
#waybar {
|
|
||||||
background: transparent;
|
|
||||||
color: @text;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Icon Only Sizes */
|
|
||||||
#network,
|
|
||||||
#backlight,
|
|
||||||
#battery {
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Node Styles */
|
|
||||||
#workspaces,
|
|
||||||
#window,
|
|
||||||
#tray,
|
|
||||||
#cpu,
|
|
||||||
#memory,
|
|
||||||
#pulseaudio,
|
|
||||||
#network,
|
|
||||||
#backlight,
|
|
||||||
#battery,
|
|
||||||
#clock {
|
|
||||||
margin-top: 1rem;
|
|
||||||
padding: 0.2px 1rem;
|
|
||||||
background-color: @surface0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button {
|
|
||||||
color: @lavender;
|
|
||||||
border-radius: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button.active {
|
|
||||||
color: @sky;
|
|
||||||
background-color: @surface2;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button:hover {
|
|
||||||
color: @sapphire;
|
|
||||||
}
|
|
||||||
|
|
||||||
#window {
|
|
||||||
background: transparent;
|
|
||||||
margin-left: 0.5rem;
|
|
||||||
margin-right: 8rem; /* Notch */
|
|
||||||
}
|
|
||||||
|
|
||||||
#memory {
|
|
||||||
color: @blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pulseaudio {
|
|
||||||
color: @maroon;
|
|
||||||
}
|
|
||||||
|
|
||||||
#network {
|
|
||||||
color: @mauve;
|
|
||||||
}
|
|
||||||
|
|
||||||
#cpu {
|
|
||||||
color: @peach;
|
|
||||||
}
|
|
||||||
|
|
||||||
#backlight {
|
|
||||||
color: @yellow;
|
|
||||||
}
|
|
||||||
|
|
||||||
#battery {
|
|
||||||
color: @green;
|
|
||||||
}
|
|
||||||
|
|
||||||
#battery.charging {
|
|
||||||
color: @green;
|
|
||||||
}
|
|
||||||
|
|
||||||
#battery.warning:not(.charging) {
|
|
||||||
color: @red;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Left Border Radius */
|
|
||||||
#clock,
|
|
||||||
#network,
|
|
||||||
#cpu,
|
|
||||||
#tray,
|
|
||||||
#workspaces {
|
|
||||||
margin-left: 0.5rem;
|
|
||||||
border-top-left-radius: 1rem;
|
|
||||||
border-bottom-left-radius: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Right Border Radius */
|
|
||||||
#pulseaudio,
|
|
||||||
#clock,
|
|
||||||
#tray,
|
|
||||||
#battery,
|
|
||||||
#workspaces {
|
|
||||||
margin-right: 0.5rem;
|
|
||||||
border-top-right-radius: 1rem;
|
|
||||||
border-bottom-right-radius: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces {
|
|
||||||
padding: 0px;
|
|
||||||
margin-left: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#clock {
|
|
||||||
color: @blue;
|
|
||||||
margin-right: 1rem;
|
|
||||||
}
|
|
||||||
@@ -1,127 +0,0 @@
|
|||||||
window {
|
|
||||||
font-family: "Hack Nerd Font";
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
#outer-box {
|
|
||||||
padding: 10px;
|
|
||||||
border-radius: 8px;
|
|
||||||
background: #2e3440;
|
|
||||||
}
|
|
||||||
|
|
||||||
#scroll {
|
|
||||||
/* The Nordic gtk theme adds an outline to show scroll areas... */
|
|
||||||
outline-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
#input {
|
|
||||||
color: #e5e9f0;
|
|
||||||
caret-color: #e5e9f0;
|
|
||||||
background: #3b4252;
|
|
||||||
border-top-color: #3b4252;
|
|
||||||
border-left-color: #3b4252;
|
|
||||||
border-right-color: #3b4252;
|
|
||||||
border-bottom-color: #3b4252;
|
|
||||||
box-shadow: 0 0 0 1px transparent inset;
|
|
||||||
outline-color: transparent !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#input:focus {
|
|
||||||
background: #3b4252;
|
|
||||||
border-color: #3b4252 !important;
|
|
||||||
box-shadow: 0 0 0 1px transparent inset;
|
|
||||||
border-top-color: #3b4252 !important;
|
|
||||||
border-left-color: #3b4252 !important;
|
|
||||||
border-right-color: #3b4252 !important;
|
|
||||||
border-bottom-color: #3b4252 !important;
|
|
||||||
box-shadow: none !important;
|
|
||||||
outline-color: transparent !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#input image.left {
|
|
||||||
color: #d8dee9;
|
|
||||||
}
|
|
||||||
|
|
||||||
#input:focus image.left {
|
|
||||||
color: #e5e9f0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#input image.right {
|
|
||||||
color: #d8dee9;
|
|
||||||
}
|
|
||||||
|
|
||||||
#input:focus image.right {
|
|
||||||
color: #e5e9f0;
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
|
||||||
/* We set backgrounds on the block level. */
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
#scroll {
|
|
||||||
padding-top: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#entry {
|
|
||||||
color: #4c566a;
|
|
||||||
padding: 8px 8px;
|
|
||||||
border-radius: 4px;
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
#entry:selected {
|
|
||||||
color: #eceff4;
|
|
||||||
background: #8fbcbb;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
expander arrow {
|
|
||||||
margin-right: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#entry #selected #text {
|
|
||||||
color: #eceff4;
|
|
||||||
}
|
|
||||||
|
|
||||||
expander list {
|
|
||||||
margin-top: 8px;
|
|
||||||
/* background: #8fbcbb; */
|
|
||||||
background: transparent;
|
|
||||||
padding-left: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
expander list #entry {
|
|
||||||
transition: none;
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
expander list #entry:hover,
|
|
||||||
expander list #entry:active {
|
|
||||||
/* color: #8fbcbb;
|
|
||||||
background: #e5e9f0; */
|
|
||||||
}
|
|
||||||
|
|
||||||
expander list #entry #selected {
|
|
||||||
background: #8fbcbb;
|
|
||||||
}
|
|
||||||
|
|
||||||
expander list #entry #selected label {
|
|
||||||
color: #eceff4;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
expander list #entry:hover,
|
|
||||||
expander list #entry:active {
|
|
||||||
background: #8fbcbb;
|
|
||||||
}
|
|
||||||
|
|
||||||
expander list #entry:hover label,
|
|
||||||
expander list #entry:active label {
|
|
||||||
color: #eceff4;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
expander list label {
|
|
||||||
color: #d8dee9;
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
stylesheet=./style.css
|
|
||||||
term=foot
|
|
||||||
insensitive=true
|
|
||||||
@@ -1,274 +0,0 @@
|
|||||||
{ lib, pkgs, config, namespace, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib) types mkIf;
|
|
||||||
inherit (lib.${namespace}) mkOpt enabled;
|
|
||||||
|
|
||||||
cfg = config.${namespace}.programs.graphical.wms.hyprland;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.programs.graphical.wms.hyprland = {
|
|
||||||
enable = lib.mkEnableOption "Hyprland";
|
|
||||||
mainMod = mkOpt types.str "SUPER" "Hyprland main modifier key";
|
|
||||||
monitors = mkOpt (with types; listOf str) [
|
|
||||||
", preferred, auto, 1"
|
|
||||||
] "Hyprland monitor configuration";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
services.swaync = enabled;
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
extraConfig = builtins.readFile ./config/hyprland.conf;
|
|
||||||
settings = {
|
|
||||||
"$mainMod" = cfg.mainMod;
|
|
||||||
"$terminal" = "ghostty";
|
|
||||||
"$menu" = "wofi --show drun";
|
|
||||||
|
|
||||||
monitor = cfg.monitors;
|
|
||||||
|
|
||||||
bind = [
|
|
||||||
# Super Bindings (macOS Transition)
|
|
||||||
"ALT_SHIFT, 1, exec, hyprshot -m output"
|
|
||||||
"ALT_SHIFT, 2, exec, hyprshot -m window"
|
|
||||||
"ALT_SHIFT, 3, exec, hyprshot -m region"
|
|
||||||
|
|
||||||
# Primary Bindings
|
|
||||||
"$mainMod, SPACE, exec, $menu"
|
|
||||||
"$mainMod, RETURN, exec, $terminal"
|
|
||||||
"$mainMod, Q, killactive"
|
|
||||||
"$mainMod, M, exit"
|
|
||||||
"$mainMod, V, togglefloating"
|
|
||||||
"$mainMod, P, pin"
|
|
||||||
"$mainMod, J, togglesplit"
|
|
||||||
"$mainMod, S, togglespecialworkspace, magic"
|
|
||||||
"$mainMod SHIFT, S, movetoworkspace, special:magic"
|
|
||||||
|
|
||||||
# Window Focus
|
|
||||||
"$mainMod, left, movefocus, l"
|
|
||||||
"$mainMod, right, movefocus, r"
|
|
||||||
"$mainMod, up, movefocus, u"
|
|
||||||
"$mainMod, down, movefocus, d"
|
|
||||||
|
|
||||||
# Workspace Switch
|
|
||||||
"$mainMod, 1, workspace, 1"
|
|
||||||
"$mainMod, 2, workspace, 2"
|
|
||||||
"$mainMod, 3, workspace, 3"
|
|
||||||
"$mainMod, 4, workspace, 4"
|
|
||||||
"$mainMod, 5, workspace, 5"
|
|
||||||
"$mainMod, 6, workspace, 6"
|
|
||||||
"$mainMod, 7, workspace, 7"
|
|
||||||
"$mainMod, 8, workspace, 8"
|
|
||||||
"$mainMod, 9, workspace, 9"
|
|
||||||
"$mainMod, 0, workspace, 10"
|
|
||||||
|
|
||||||
# Window Workspace Move
|
|
||||||
"$mainMod SHIFT, 1, movetoworkspace, 1"
|
|
||||||
"$mainMod SHIFT, 2, movetoworkspace, 2"
|
|
||||||
"$mainMod SHIFT, 3, movetoworkspace, 3"
|
|
||||||
"$mainMod SHIFT, 4, movetoworkspace, 4"
|
|
||||||
"$mainMod SHIFT, 5, movetoworkspace, 5"
|
|
||||||
"$mainMod SHIFT, 6, movetoworkspace, 6"
|
|
||||||
"$mainMod SHIFT, 7, movetoworkspace, 7"
|
|
||||||
"$mainMod SHIFT, 8, movetoworkspace, 8"
|
|
||||||
"$mainMod SHIFT, 9, movetoworkspace, 9"
|
|
||||||
"$mainMod SHIFT, 0, movetoworkspace, 10"
|
|
||||||
"$mainMod SHIFT, right, workspace, +1"
|
|
||||||
"$mainMod SHIFT, left, workspace, -1"
|
|
||||||
];
|
|
||||||
bindm = [
|
|
||||||
# Window Resizing
|
|
||||||
"$mainMod, mouse:272, movewindow"
|
|
||||||
"$mainMod, mouse:273, resizewindow"
|
|
||||||
];
|
|
||||||
bindel = [
|
|
||||||
# Multimedia & Brightness Keys
|
|
||||||
",XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
|
|
||||||
",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
|
|
||||||
",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
|
||||||
",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
|
|
||||||
",XF86MonBrightnessUp, exec, brightnessctl s 10%+"
|
|
||||||
",XF86MonBrightnessDown, exec, brightnessctl s 10%-"
|
|
||||||
|
|
||||||
# macOS Keyboard Brightness
|
|
||||||
"ALT, XF86MonBrightnessUp, exec, brightnessctl -d kbd_backlight s 10%+"
|
|
||||||
"ALT, XF86MonBrightnessDown, exec, brightnessctl -d kbd_backlight s 10%-"
|
|
||||||
];
|
|
||||||
bindl = [
|
|
||||||
# Player Controls
|
|
||||||
", XF86AudioNext, exec, playerctl next"
|
|
||||||
", XF86AudioPause, exec, playerctl play-pause"
|
|
||||||
", XF86AudioPlay, exec, playerctl play-pause"
|
|
||||||
", XF86AudioPrev, exec, playerctl previous"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.waybar = {
|
|
||||||
enable = true;
|
|
||||||
style = builtins.readFile ./config/waybar-style.css;
|
|
||||||
settings = [{
|
|
||||||
layer = "top";
|
|
||||||
position = "top";
|
|
||||||
mod = "dock";
|
|
||||||
exclusive = true;
|
|
||||||
passtrough = false;
|
|
||||||
gtk-layer-shell = true;
|
|
||||||
height = 0;
|
|
||||||
modules-left = [
|
|
||||||
"hyprland/workspaces"
|
|
||||||
"hyprland/window"
|
|
||||||
];
|
|
||||||
# modules-center = [ "hyprland/window" ];
|
|
||||||
modules-right = [
|
|
||||||
"tray"
|
|
||||||
"cpu"
|
|
||||||
"memory"
|
|
||||||
"pulseaudio"
|
|
||||||
"network"
|
|
||||||
"backlight"
|
|
||||||
"battery"
|
|
||||||
"clock"
|
|
||||||
];
|
|
||||||
"hyprland/window" = { format = "{}"; };
|
|
||||||
"wlr/workspaces" = {
|
|
||||||
on-scroll-up = "hyprctl dispatch workspace e+1";
|
|
||||||
on-scroll-down = "hyprctl dispatch workspace e-1";
|
|
||||||
all-outputs = true;
|
|
||||||
on-click = "activate";
|
|
||||||
};
|
|
||||||
battery = {
|
|
||||||
states = {
|
|
||||||
warning = 30;
|
|
||||||
critical = 15;
|
|
||||||
};
|
|
||||||
format = "{icon}";
|
|
||||||
format-charging = "";
|
|
||||||
format-plugged = "";
|
|
||||||
format-alt = "{icon}";
|
|
||||||
format-icons = [
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
];
|
|
||||||
};
|
|
||||||
cpu = {
|
|
||||||
interval = 10;
|
|
||||||
format = " {}%";
|
|
||||||
max-length = 10;
|
|
||||||
on-click = "";
|
|
||||||
};
|
|
||||||
memory = {
|
|
||||||
interval = 30;
|
|
||||||
format = " {}%";
|
|
||||||
format-alt = " {used:0.1f}G";
|
|
||||||
max-length = 10;
|
|
||||||
};
|
|
||||||
|
|
||||||
backlight = {
|
|
||||||
format = "{icon}";
|
|
||||||
format-icons = [
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
];
|
|
||||||
on-scroll-up = "brightnessctl s 1%-";
|
|
||||||
on-scroll-down = "brightnessctl s +1%";
|
|
||||||
};
|
|
||||||
tray = {
|
|
||||||
icon-size = 13;
|
|
||||||
tooltip = false;
|
|
||||||
spacing = 10;
|
|
||||||
};
|
|
||||||
network = {
|
|
||||||
interval = 1;
|
|
||||||
format-wifi = "";
|
|
||||||
format-ethernet = "";
|
|
||||||
format-linked = "";
|
|
||||||
format-disconnected = "";
|
|
||||||
on-click-right = "${pkgs.networkmanagerapplet}/bin/nm-connection-editor";
|
|
||||||
# tooltip-format = ''
|
|
||||||
# <big>Network Details</big>
|
|
||||||
# <tt><small>Interface: {ifname}</small></tt>
|
|
||||||
# <tt><small>IP: {ipaddr}/{cidr}</small></tt>
|
|
||||||
# <tt><small>Gateway: {gwaddr}</small></tt>
|
|
||||||
# <tt><small> {bandwidthUpBytes}\n {bandwidthDownBytes}</small></tt>'';
|
|
||||||
tooltip-format = ''
|
|
||||||
<big>Network Details</big>
|
|
||||||
<small>
|
|
||||||
Interface: {ifname}
|
|
||||||
SSID: {essid}
|
|
||||||
IP Address: {ipaddr}/{cidr}
|
|
||||||
Gateway: {gwaddr}
|
|
||||||
|
|
||||||
{bandwidthUpBytes} / {bandwidthDownBytes}
|
|
||||||
</small>'';
|
|
||||||
|
|
||||||
};
|
|
||||||
clock = {
|
|
||||||
format = " {:%Y-%m-%d %H:%M:%S}";
|
|
||||||
interval = 1;
|
|
||||||
tooltip-format = ''
|
|
||||||
<big>{:%Y %B}</big>
|
|
||||||
<tt><small>{calendar}</small></tt>'';
|
|
||||||
};
|
|
||||||
pulseaudio = {
|
|
||||||
format = "{icon} {volume}%";
|
|
||||||
tooltip = false;
|
|
||||||
format-muted = " Muted";
|
|
||||||
on-click = "pamixer -t";
|
|
||||||
on-scroll-up = "pamixer -i 5";
|
|
||||||
on-scroll-down = "pamixer -d 5";
|
|
||||||
scroll-step = 5;
|
|
||||||
format-icons = {
|
|
||||||
headphone = "";
|
|
||||||
hands-free = "";
|
|
||||||
headset = "";
|
|
||||||
phone = "";
|
|
||||||
portable = "";
|
|
||||||
car = "";
|
|
||||||
default = [ "" "" "" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
"pulseaudio#microphone" = {
|
|
||||||
format = "{format_source}";
|
|
||||||
tooltip = false;
|
|
||||||
format-source = " {volume}%";
|
|
||||||
format-source-muted = " Muted";
|
|
||||||
on-click = "pamixer --default-source -t";
|
|
||||||
on-scroll-up = "pamixer --default-source -i 5";
|
|
||||||
on-scroll-down = "pamixer --default-source -d 5";
|
|
||||||
scroll-step = 5;
|
|
||||||
};
|
|
||||||
}];
|
|
||||||
};
|
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
brightnessctl
|
|
||||||
hyprshot
|
|
||||||
wofi
|
|
||||||
wofi-emoji
|
|
||||||
];
|
|
||||||
|
|
||||||
xdg.configFile = {
|
|
||||||
"wofi/config".source = ./config/wofi.conf;
|
|
||||||
"wofi/style.css".source = ./config/wofi-style.css;
|
|
||||||
"uwsp/env".text = ''
|
|
||||||
export XCURSOR_SIZE=64
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
296
modules/home/programs/hyprland/config/hyprland.conf
Normal file
296
modules/home/programs/hyprland/config/hyprland.conf
Normal file
@@ -0,0 +1,296 @@
|
|||||||
|
|
||||||
|
# #######################################################################################
|
||||||
|
# AUTOGENERATED HYPR CONFIG.
|
||||||
|
# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT,
|
||||||
|
# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
|
||||||
|
# #######################################################################################
|
||||||
|
|
||||||
|
# This is an example Hyprland config file.
|
||||||
|
# Refer to the wiki for more information.
|
||||||
|
# https://wiki.hyprland.org/Configuring/
|
||||||
|
|
||||||
|
# Please note not all available settings / options are set here.
|
||||||
|
# For a full list, see the wiki
|
||||||
|
|
||||||
|
# You can split this configuration into multiple files
|
||||||
|
# Create your files separately and then link them to this file like this:
|
||||||
|
# source = ~/.config/hypr/myColors.conf
|
||||||
|
|
||||||
|
|
||||||
|
################
|
||||||
|
### MONITORS ###
|
||||||
|
################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||||
|
monitor=,preferred,auto,1.0
|
||||||
|
# monitor=HDMI-A-1,1920x1080,0x0,1
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### MY PROGRAMS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||||
|
|
||||||
|
# Set programs that you use
|
||||||
|
$terminal = ghostty
|
||||||
|
$fileManager = dolphin
|
||||||
|
$menu = wofi --show drun
|
||||||
|
|
||||||
|
|
||||||
|
#################
|
||||||
|
### AUTOSTART ###
|
||||||
|
#################
|
||||||
|
|
||||||
|
# Autostart necessary processes (like notifications daemons, status bars, etc.)
|
||||||
|
# Or execute your favorite apps at launch like this:
|
||||||
|
|
||||||
|
# exec-once = $terminal
|
||||||
|
# exec-once = nm-applet &
|
||||||
|
exec-once = waybar & $terminal & firefox
|
||||||
|
|
||||||
|
|
||||||
|
#############################
|
||||||
|
### ENVIRONMENT VARIABLES ###
|
||||||
|
#############################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Environment-variables/
|
||||||
|
|
||||||
|
env = XCURSOR_SIZE,24
|
||||||
|
env = HYPRCURSOR_SIZE,24
|
||||||
|
|
||||||
|
|
||||||
|
#####################
|
||||||
|
### LOOK AND FEEL ###
|
||||||
|
#####################
|
||||||
|
|
||||||
|
# Refer to https://wiki.hyprland.org/Configuring/Variables/
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#general
|
||||||
|
general {
|
||||||
|
gaps_in = 5
|
||||||
|
gaps_out = 20
|
||||||
|
|
||||||
|
border_size = 2
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
|
||||||
|
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||||
|
col.inactive_border = rgba(595959aa)
|
||||||
|
|
||||||
|
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||||
|
resize_on_border = false
|
||||||
|
|
||||||
|
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false
|
||||||
|
|
||||||
|
layout = dwindle
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
||||||
|
decoration {
|
||||||
|
rounding = 10
|
||||||
|
|
||||||
|
# Change transparency of focused and unfocused windows
|
||||||
|
active_opacity = 1.0
|
||||||
|
inactive_opacity = 1.0
|
||||||
|
|
||||||
|
shadow {
|
||||||
|
enabled = true
|
||||||
|
range = 4
|
||||||
|
render_power = 3
|
||||||
|
color = rgba(1a1a1aee)
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
size = 3
|
||||||
|
passes = 1
|
||||||
|
|
||||||
|
vibrancy = 0.1696
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||||
|
animations {
|
||||||
|
enabled = yes, please :)
|
||||||
|
|
||||||
|
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||||
|
|
||||||
|
bezier = easeOutQuint,0.23,1,0.32,1
|
||||||
|
bezier = easeInOutCubic,0.65,0.05,0.36,1
|
||||||
|
bezier = linear,0,0,1,1
|
||||||
|
bezier = almostLinear,0.5,0.5,0.75,1.0
|
||||||
|
bezier = quick,0.15,0,0.1,1
|
||||||
|
|
||||||
|
animation = global, 1, 10, default
|
||||||
|
animation = border, 1, 5.39, easeOutQuint
|
||||||
|
animation = windows, 1, 4.79, easeOutQuint
|
||||||
|
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
||||||
|
animation = windowsOut, 1, 1.49, linear, popin 87%
|
||||||
|
animation = fadeIn, 1, 1.73, almostLinear
|
||||||
|
animation = fadeOut, 1, 1.46, almostLinear
|
||||||
|
animation = fade, 1, 3.03, quick
|
||||||
|
animation = layers, 1, 3.81, easeOutQuint
|
||||||
|
animation = layersIn, 1, 4, easeOutQuint, fade
|
||||||
|
animation = layersOut, 1, 1.5, linear, fade
|
||||||
|
animation = fadeLayersIn, 1, 1.79, almostLinear
|
||||||
|
animation = fadeLayersOut, 1, 1.39, almostLinear
|
||||||
|
animation = workspaces, 1, 1.94, almostLinear, fade
|
||||||
|
animation = workspacesIn, 1, 1.21, almostLinear, fade
|
||||||
|
animation = workspacesOut, 1, 1.94, almostLinear, fade
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
|
||||||
|
# "Smart gaps" / "No gaps when only"
|
||||||
|
# uncomment all if you wish to use that.
|
||||||
|
# workspace = w[tv1], gapsout:0, gapsin:0
|
||||||
|
# workspace = f[1], gapsout:0, gapsin:0
|
||||||
|
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1]
|
||||||
|
# windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1]
|
||||||
|
# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
|
||||||
|
# windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||||
|
dwindle {
|
||||||
|
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = true # You probably want this
|
||||||
|
}
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||||
|
master {
|
||||||
|
new_status = master
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
||||||
|
misc {
|
||||||
|
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||||
|
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#############
|
||||||
|
### INPUT ###
|
||||||
|
#############
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#input
|
||||||
|
input {
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant =
|
||||||
|
kb_model =
|
||||||
|
kb_options =
|
||||||
|
kb_rules =
|
||||||
|
|
||||||
|
follow_mouse = 1
|
||||||
|
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#gestures
|
||||||
|
gestures {
|
||||||
|
workspace_swipe = false
|
||||||
|
}
|
||||||
|
|
||||||
|
# Example per-device config
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
|
||||||
|
device {
|
||||||
|
name = epic-mouse-v1
|
||||||
|
sensitivity = -0.5
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### KEYBINDINGS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||||
|
$mainMod = SUPER # Sets "Windows" key as main modifier
|
||||||
|
|
||||||
|
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||||
|
bind = $mainMod, Q, exec, $terminal
|
||||||
|
bind = $mainMod, C, killactive,
|
||||||
|
bind = $mainMod, M, exit,
|
||||||
|
bind = $mainMod, E, exec, $fileManager
|
||||||
|
bind = $mainMod, V, togglefloating,
|
||||||
|
bind = $mainMod, R, exec, $menu
|
||||||
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
|
bind = $mainMod, J, togglesplit, # dwindle
|
||||||
|
|
||||||
|
# Move focus with mainMod + arrow keys
|
||||||
|
bind = $mainMod, left, movefocus, l
|
||||||
|
bind = $mainMod, right, movefocus, r
|
||||||
|
bind = $mainMod, up, movefocus, u
|
||||||
|
bind = $mainMod, down, movefocus, d
|
||||||
|
|
||||||
|
# Switch workspaces with mainMod + [0-9]
|
||||||
|
bind = $mainMod, 1, workspace, 1
|
||||||
|
bind = $mainMod, 2, workspace, 2
|
||||||
|
bind = $mainMod, 3, workspace, 3
|
||||||
|
bind = $mainMod, 4, workspace, 4
|
||||||
|
bind = $mainMod, 5, workspace, 5
|
||||||
|
bind = $mainMod, 6, workspace, 6
|
||||||
|
bind = $mainMod, 7, workspace, 7
|
||||||
|
bind = $mainMod, 8, workspace, 8
|
||||||
|
bind = $mainMod, 9, workspace, 9
|
||||||
|
bind = $mainMod, 0, workspace, 10
|
||||||
|
|
||||||
|
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||||
|
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||||
|
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||||
|
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||||
|
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||||
|
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||||
|
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||||
|
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||||
|
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||||
|
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||||
|
|
||||||
|
# Example special workspace (scratchpad)
|
||||||
|
bind = $mainMod, S, togglespecialworkspace, magic
|
||||||
|
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
|
||||||
|
|
||||||
|
# Scroll through existing workspaces with mainMod + scroll
|
||||||
|
bind = $mainMod, mouse_down, workspace, e+1
|
||||||
|
bind = $mainMod, mouse_up, workspace, e-1
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
|
||||||
|
# Laptop multimedia keys for volume and LCD brightness
|
||||||
|
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
|
||||||
|
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||||
|
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||||
|
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||||
|
bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
|
||||||
|
bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
|
||||||
|
|
||||||
|
# Requires playerctl
|
||||||
|
bindl = , XF86AudioNext, exec, playerctl next
|
||||||
|
bindl = , XF86AudioPause, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioPrev, exec, playerctl previous
|
||||||
|
|
||||||
|
##############################
|
||||||
|
### WINDOWS AND WORKSPACES ###
|
||||||
|
##############################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||||
|
|
||||||
|
# Example windowrule v1
|
||||||
|
# windowrule = float, ^(kitty)$
|
||||||
|
|
||||||
|
# Example windowrule v2
|
||||||
|
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
|
||||||
|
|
||||||
|
# Ignore maximize requests from apps. You'll probably like this.
|
||||||
|
windowrulev2 = suppressevent maximize, class:.*
|
||||||
|
|
||||||
|
# Fix some dragging issues with XWayland
|
||||||
|
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
||||||
88
modules/home/programs/hyprland/config/waybar-style.css
Normal file
88
modules/home/programs/hyprland/config/waybar-style.css
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
* {
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
font-family:
|
||||||
|
Cartograph CF Nerd Font,
|
||||||
|
monospace;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 14px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background: rgba(21, 18, 27, 0);
|
||||||
|
color: #cdd6f4;
|
||||||
|
}
|
||||||
|
|
||||||
|
tooltip {
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.active {
|
||||||
|
color: #9ccfd8;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.focused {
|
||||||
|
color: #9ccfd8;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button:hover {
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-language,
|
||||||
|
#custom-updates,
|
||||||
|
#custom-caffeine,
|
||||||
|
#custom-weather,
|
||||||
|
#window,
|
||||||
|
#clock,
|
||||||
|
#battery,
|
||||||
|
#pulseaudio,
|
||||||
|
#network,
|
||||||
|
#workspaces,
|
||||||
|
#tray,
|
||||||
|
#backlight {
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces {
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-caffeine {
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-language {
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-updates {
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
}
|
||||||
|
|
||||||
|
#network {
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio {
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio.microphone {
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery {
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-weather {
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-endright {
|
||||||
|
}
|
||||||
129
modules/home/programs/hyprland/default.nix
Normal file
129
modules/home/programs/hyprland/default.nix
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
{ lib, config, namespace, ... }:
|
||||||
|
let
|
||||||
|
inherit (lib) mkIf;
|
||||||
|
cfg = config.${namespace}.programs.hyprland;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.${namespace}.programs.hyprland = {
|
||||||
|
enable = lib.mkEnableOption "Hyprland";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = builtins.readFile ./config/hyprland.conf;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
style = builtins.readFile ./config/waybar-style.css;
|
||||||
|
settings = [{
|
||||||
|
layer = "top";
|
||||||
|
position = "top";
|
||||||
|
mod = "dock";
|
||||||
|
exclusive = true;
|
||||||
|
passtrough = false;
|
||||||
|
gtk-layer-shell = true;
|
||||||
|
height = 0;
|
||||||
|
modules-left = [
|
||||||
|
"hyprland/workspaces"
|
||||||
|
"custom/divider"
|
||||||
|
"custom/divider"
|
||||||
|
"cpu"
|
||||||
|
"custom/divider"
|
||||||
|
"memory"
|
||||||
|
];
|
||||||
|
modules-center = [ "hyprland/window" ];
|
||||||
|
modules-right = [
|
||||||
|
"tray"
|
||||||
|
"network"
|
||||||
|
"custom/divider"
|
||||||
|
"backlight"
|
||||||
|
"custom/divider"
|
||||||
|
"pulseaudio"
|
||||||
|
"custom/divider"
|
||||||
|
"battery"
|
||||||
|
"custom/divider"
|
||||||
|
"clock"
|
||||||
|
];
|
||||||
|
"hyprland/window" = { format = "{}"; };
|
||||||
|
"wlr/workspaces" = {
|
||||||
|
on-scroll-up = "hyprctl dispatch workspace e+1";
|
||||||
|
on-scroll-down = "hyprctl dispatch workspace e-1";
|
||||||
|
all-outputs = true;
|
||||||
|
on-click = "activate";
|
||||||
|
};
|
||||||
|
battery = { format = " {}%"; };
|
||||||
|
cpu = {
|
||||||
|
interval = 10;
|
||||||
|
format = " {}%";
|
||||||
|
max-length = 10;
|
||||||
|
on-click = "";
|
||||||
|
};
|
||||||
|
memory = {
|
||||||
|
interval = 30;
|
||||||
|
format = " {}%";
|
||||||
|
format-alt = " {used:0.1f}G";
|
||||||
|
max-length = 10;
|
||||||
|
};
|
||||||
|
backlight = {
|
||||||
|
format = " {}";
|
||||||
|
device = "acpi_video0";
|
||||||
|
};
|
||||||
|
tray = {
|
||||||
|
icon-size = 13;
|
||||||
|
tooltip = false;
|
||||||
|
spacing = 10;
|
||||||
|
};
|
||||||
|
network = {
|
||||||
|
format = " {essid}";
|
||||||
|
format-disconnected = " disconnected";
|
||||||
|
};
|
||||||
|
clock = {
|
||||||
|
format = " {:%I:%M %p %m/%d} ";
|
||||||
|
tooltip-format = ''
|
||||||
|
<big>{:%Y %B}</big>
|
||||||
|
<tt><small>{calendar}</small></tt>'';
|
||||||
|
};
|
||||||
|
pulseaudio = {
|
||||||
|
format = "{icon} {volume}%";
|
||||||
|
tooltip = false;
|
||||||
|
format-muted = " Muted";
|
||||||
|
on-click = "pamixer -t";
|
||||||
|
on-scroll-up = "pamixer -i 5";
|
||||||
|
on-scroll-down = "pamixer -d 5";
|
||||||
|
scroll-step = 5;
|
||||||
|
format-icons = {
|
||||||
|
headphone = "";
|
||||||
|
hands-free = "";
|
||||||
|
headset = "";
|
||||||
|
phone = "";
|
||||||
|
portable = "";
|
||||||
|
car = "";
|
||||||
|
default = [ "" "" "" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"pulseaudio#microphone" = {
|
||||||
|
format = "{format_source}";
|
||||||
|
tooltip = false;
|
||||||
|
format-source = " {volume}%";
|
||||||
|
format-source-muted = " Muted";
|
||||||
|
on-click = "pamixer --default-source -t";
|
||||||
|
on-scroll-up = "pamixer --default-source -i 5";
|
||||||
|
on-scroll-down = "pamixer --default-source -d 5";
|
||||||
|
scroll-step = 5;
|
||||||
|
};
|
||||||
|
"custom/divider" = {
|
||||||
|
format = " | ";
|
||||||
|
interval = "once";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
"custom/endright" = {
|
||||||
|
format = "_";
|
||||||
|
interval = "once";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
4
modules/home/programs/terminal/k9s/default.nix → modules/home/programs/k9s/default.nix
Executable file → Normal file
4
modules/home/programs/terminal/k9s/default.nix → modules/home/programs/k9s/default.nix
Executable file → Normal file
@@ -1,10 +1,10 @@
|
|||||||
{ lib, pkgs, config, namespace, ... }:
|
{ lib, pkgs, config, namespace, ... }:
|
||||||
let
|
let
|
||||||
inherit (lib) mkIf;
|
inherit (lib) mkIf;
|
||||||
cfg = config.${namespace}.programs.terminal.k9s;
|
cfg = config.${namespace}.programs.k9s;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.${namespace}.programs.terminal.k9s = {
|
options.${namespace}.programs.k9s = {
|
||||||
enable = lib.mkEnableOption "k9s";
|
enable = lib.mkEnableOption "k9s";
|
||||||
};
|
};
|
||||||
|
|
||||||
0
modules/home/programs/terminal/nvim/config/lua/.luarc.json → modules/home/programs/nvim/config/lua/.luarc.json
Executable file → Normal file
0
modules/home/programs/terminal/nvim/config/lua/.luarc.json → modules/home/programs/nvim/config/lua/.luarc.json
Executable file → Normal file
8
modules/home/programs/nvim/config/lua/aerial-config.lua
Normal file
8
modules/home/programs/nvim/config/lua/aerial-config.lua
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
require('aerial').setup({
|
||||||
|
on_attach = function(bufnr)
|
||||||
|
vim.keymap.set('n', '{', '<cmd>AerialPrev<CR>', {buffer = bufnr})
|
||||||
|
vim.keymap.set('n', '}', '<cmd>AerialNext<CR>', {buffer = bufnr})
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>a', '<cmd>AerialToggle!<CR>')
|
||||||
0
modules/home/programs/terminal/nvim/config/lua/autopairs-config.lua → modules/home/programs/nvim/config/lua/autopairs-config.lua
Executable file → Normal file
0
modules/home/programs/terminal/nvim/config/lua/autopairs-config.lua → modules/home/programs/nvim/config/lua/autopairs-config.lua
Executable file → Normal file
66
modules/home/programs/nvim/config/lua/base.lua
Normal file
66
modules/home/programs/nvim/config/lua/base.lua
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
-- Set Theme
|
||||||
|
-- vim.g.nord_borders = true
|
||||||
|
-- vim.g.nord_contrast = true
|
||||||
|
-- vim.cmd('colorscheme nord')
|
||||||
|
vim.cmd('colorscheme melange')
|
||||||
|
|
||||||
|
-- Set Leader
|
||||||
|
vim.keymap.set("n", "<Space>", "<Nop>", {silent = true})
|
||||||
|
vim.g.mapleader = " "
|
||||||
|
|
||||||
|
-- Set Timeout
|
||||||
|
vim.opt.timeoutlen = 250
|
||||||
|
|
||||||
|
-- Disable NetRW
|
||||||
|
vim.g.loaded_netrw = 1
|
||||||
|
vim.g.loaded_netrwPlugin = 1
|
||||||
|
|
||||||
|
-- Set Term Colors
|
||||||
|
vim.opt.termguicolors = true
|
||||||
|
|
||||||
|
-- Synchronize with system clipboard
|
||||||
|
vim.opt.clipboard = "unnamed"
|
||||||
|
|
||||||
|
-- Always show the signcolumn
|
||||||
|
vim.opt.signcolumn = "yes"
|
||||||
|
|
||||||
|
-- Set nowrap, line numbers, hightlight search
|
||||||
|
vim.opt.wrap = false
|
||||||
|
vim.opt.nu = true
|
||||||
|
vim.opt.hlsearch = true
|
||||||
|
vim.opt.shiftwidth = 2
|
||||||
|
|
||||||
|
-- Set fold settings
|
||||||
|
vim.opt.foldmethod = "indent"
|
||||||
|
vim.opt.foldnestmax = 10
|
||||||
|
vim.opt.foldlevel = 2
|
||||||
|
|
||||||
|
-- Diagnostics Mappings
|
||||||
|
local diagnostics_active = true
|
||||||
|
local toggle_diagnostics = function()
|
||||||
|
diagnostics_active = not diagnostics_active
|
||||||
|
if diagnostics_active then
|
||||||
|
vim.diagnostic.enable()
|
||||||
|
else
|
||||||
|
vim.diagnostic.disable()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local diagnostics_loclist_active = false
|
||||||
|
local toggle_diagnostics_loclist = function()
|
||||||
|
diagnostics_loclist_active = not diagnostics_loclist_active
|
||||||
|
if diagnostics_loclist_active then
|
||||||
|
vim.diagnostic.setloclist()
|
||||||
|
else
|
||||||
|
vim.cmd('lclose')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local opts = {noremap = true, silent = true}
|
||||||
|
vim.keymap.set('n', '<leader>qt', toggle_diagnostics, opts)
|
||||||
|
vim.keymap.set('n', '<leader>qN',
|
||||||
|
function() vim.diagnostic.goto_prev({float = false}) end, opts)
|
||||||
|
vim.keymap.set('n', '<leader>qn',
|
||||||
|
function() vim.diagnostic.goto_next({float = false}) end, opts)
|
||||||
|
vim.keymap.set('n', '<leader>qq', toggle_diagnostics_loclist, opts)
|
||||||
|
vim.keymap.set('n', '<leader>qe', vim.diagnostic.open_float, opts)
|
||||||
71
modules/home/programs/nvim/config/lua/cmp-config.lua
Normal file
71
modules/home/programs/nvim/config/lua/cmp-config.lua
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
local cmp = require('cmp')
|
||||||
|
require("luasnip.loaders.from_vscode").lazy_load()
|
||||||
|
|
||||||
|
-- Check Tab Completion
|
||||||
|
local has_words_before = function()
|
||||||
|
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
||||||
|
return col ~= 0 and
|
||||||
|
vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col,
|
||||||
|
col)
|
||||||
|
:match("%s") == nil
|
||||||
|
end
|
||||||
|
|
||||||
|
cmp.setup({
|
||||||
|
snippet = {
|
||||||
|
expand = function(args) require'luasnip'.lsp_expand(args.body) end
|
||||||
|
},
|
||||||
|
|
||||||
|
mapping = cmp.mapping.preset.insert({
|
||||||
|
|
||||||
|
-- Tab Completion
|
||||||
|
["<Tab>"] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_next_item()
|
||||||
|
elseif has_words_before() then
|
||||||
|
cmp.complete()
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, {"i", "s"}),
|
||||||
|
|
||||||
|
-- Reverse Tab Completion
|
||||||
|
["<S-Tab>"] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_prev_item()
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, {"i", "s"}),
|
||||||
|
|
||||||
|
-- Misc Mappings
|
||||||
|
['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
||||||
|
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
||||||
|
['<C-Space>'] = cmp.mapping.complete(),
|
||||||
|
['<C-e>'] = cmp.mapping.abort(),
|
||||||
|
['<CR>'] = cmp.mapping.confirm({select = true})
|
||||||
|
|
||||||
|
}),
|
||||||
|
|
||||||
|
-- Default Sources
|
||||||
|
sources = cmp.config.sources({
|
||||||
|
{name = 'nvim_lsp'}, {name = 'luasnip'}, {name = 'path'},
|
||||||
|
{name = 'buffer'}
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Completion - `/` and `?`
|
||||||
|
cmp.setup.cmdline({'/', '?'}, {
|
||||||
|
mapping = cmp.mapping.preset.cmdline(),
|
||||||
|
sources = {{name = 'buffer'}}
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Completion = `:`
|
||||||
|
cmp.setup.cmdline(':', {
|
||||||
|
mapping = cmp.mapping.preset.cmdline(),
|
||||||
|
sources = cmp.config.sources({{name = 'path'}, {name = 'cmdline'}})
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Autopairs
|
||||||
|
local cmp_autopairs = require('nvim-autopairs.completion.cmp')
|
||||||
|
cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done())
|
||||||
0
modules/home/programs/terminal/nvim/config/lua/comment-config.lua → modules/home/programs/nvim/config/lua/comment-config.lua
Executable file → Normal file
0
modules/home/programs/terminal/nvim/config/lua/comment-config.lua → modules/home/programs/nvim/config/lua/comment-config.lua
Executable file → Normal file
70
modules/home/programs/nvim/config/lua/dap-config.lua
Normal file
70
modules/home/programs/nvim/config/lua/dap-config.lua
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
local dap = require("dap")
|
||||||
|
local dapui = require("dapui")
|
||||||
|
local dapgo = require("dap-go")
|
||||||
|
|
||||||
|
dapui.setup({
|
||||||
|
controls = {
|
||||||
|
element = "repl",
|
||||||
|
enabled = true,
|
||||||
|
icons = {
|
||||||
|
disconnect = "",
|
||||||
|
pause = "",
|
||||||
|
play = "",
|
||||||
|
run_last = "",
|
||||||
|
step_back = "",
|
||||||
|
step_into = "",
|
||||||
|
step_out = "",
|
||||||
|
step_over = "",
|
||||||
|
terminate = ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
element_mappings = {},
|
||||||
|
expand_lines = false,
|
||||||
|
floating = {border = "single", mappings = {close = {"q", "<Esc>"}}},
|
||||||
|
force_buffers = true,
|
||||||
|
icons = {collapsed = "", current_frame = "", expanded = ""},
|
||||||
|
layouts = {
|
||||||
|
{
|
||||||
|
elements = {{id = "repl", size = 0.5}, {id = "scopes", size = 0.5}},
|
||||||
|
position = "bottom",
|
||||||
|
size = 10
|
||||||
|
}, {
|
||||||
|
elements = {
|
||||||
|
{id = "breakpoints", size = 0.5}, {id = "stacks", size = 0.5}
|
||||||
|
},
|
||||||
|
position = "left",
|
||||||
|
size = 40
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mappings = {
|
||||||
|
edit = "e",
|
||||||
|
expand = {"<CR>", "<2-LeftMouse>"},
|
||||||
|
open = "o",
|
||||||
|
remove = "d",
|
||||||
|
repl = "r",
|
||||||
|
toggle = "t"
|
||||||
|
},
|
||||||
|
render = {indent = 1, max_value_lines = 100}
|
||||||
|
})
|
||||||
|
dapgo.setup()
|
||||||
|
|
||||||
|
-- Auto Open UI
|
||||||
|
dap.listeners.before.attach.dapui_config = function() dapui.open() end
|
||||||
|
dap.listeners.before.launch.dapui_config = function() dapui.open() end
|
||||||
|
|
||||||
|
-- Continue Hotkey ("c")
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = "dap-repl",
|
||||||
|
callback = function()
|
||||||
|
vim.api.nvim_buf_set_keymap(0, 'n', 'c',
|
||||||
|
"<cmd>lua require'dap'.continue()<CR>",
|
||||||
|
{noremap = true, silent = true})
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Leader Keys
|
||||||
|
local opts = {noremap = true, silent = true}
|
||||||
|
vim.keymap.set('n', '<leader>db', dap.toggle_breakpoint, opts)
|
||||||
|
vim.keymap.set('n', '<leader>du', dapui.toggle, opts)
|
||||||
|
vim.keymap.set('n', '<leader>dc', dap.continue, opts)
|
||||||
|
vim.keymap.set('n', '<leader>dt', dapgo.debug_test, opts)
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
vim.keymap.set('n', '<leader>go', '<cmd>DiffviewOpen<CR>')
|
||||||
|
vim.keymap.set('n', '<leader>gO', '<cmd>DiffviewOpen origin/main...HEAD<CR>')
|
||||||
|
vim.keymap.set('n', '<leader>gh', '<cmd>DiffviewFileHistory<CR>')
|
||||||
|
vim.keymap.set('n', '<leader>gH',
|
||||||
|
'<cmd>DiffviewFileHistory --range=origin..HEAD<CR>')
|
||||||
|
vim.keymap.set('n', '<leader>gc', '<cmd>DiffviewClose<CR>')
|
||||||
41
modules/home/programs/nvim/config/lua/git-ref.lua
Normal file
41
modules/home/programs/nvim/config/lua/git-ref.lua
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
function get_git_info()
|
||||||
|
local abs_path = vim.fn.expand("%:p")
|
||||||
|
local git_root = vim.fn.systemlist(
|
||||||
|
"git -C " .. vim.fn.escape(vim.fn.fnamemodify(abs_path, ":h"), " ") .. " rev-parse --show-toplevel"
|
||||||
|
)[1]
|
||||||
|
|
||||||
|
if vim.v.shell_error ~= 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local git_repo = vim.fn.system("git remote get-url origin"):match("([^/:]+/[^/.]+)%.?[^/]*$"):gsub("\n", "")
|
||||||
|
local git_branch = vim.fn.system("git rev-parse --abbrev-ref HEAD"):gsub("\n", "")
|
||||||
|
|
||||||
|
return {
|
||||||
|
file = vim.fn.fnamemodify(abs_path, ":s?" .. git_root .. "/??"),
|
||||||
|
branch = git_branch,
|
||||||
|
repo = git_repo,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.keymap.set("v", "<Leader>gy", function()
|
||||||
|
local git_info = get_git_info()
|
||||||
|
if git_info == nil then
|
||||||
|
vim.notify("Failed to get git info", vim.log.levels.ERROR)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local start_line = vim.fn.line("v")
|
||||||
|
local end_line = vim.fn.line(".")
|
||||||
|
|
||||||
|
local message = string.format(
|
||||||
|
"https://github.com/%s/blob/%s/%s#L%d-L%d",
|
||||||
|
git_info.repo,
|
||||||
|
git_info.branch,
|
||||||
|
git_info.file,
|
||||||
|
start_line,
|
||||||
|
end_line
|
||||||
|
)
|
||||||
|
vim.fn.setreg("+", message)
|
||||||
|
vim.notify("Copied:\n\t" .. message, vim.log.levels.INFO)
|
||||||
|
end, { noremap = true, silent = true, desc = "Copy GitHub Link" })
|
||||||
16
modules/home/programs/nvim/config/lua/git-signs.lua
Normal file
16
modules/home/programs/nvim/config/lua/git-signs.lua
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
require('gitsigns').setup {
|
||||||
|
on_attach = function(bufnr)
|
||||||
|
local gitsigns = require('gitsigns')
|
||||||
|
|
||||||
|
local function map(mode, l, r, opts)
|
||||||
|
opts = opts or {}
|
||||||
|
opts.buffer = bufnr
|
||||||
|
vim.keymap.set(mode, l, r, opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
map('n', '<leader>gb', gitsigns.toggle_current_line_blame)
|
||||||
|
map('n', '<leader>gB', function()
|
||||||
|
gitsigns.blame_line {full = true}
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
}
|
||||||
16
modules/home/programs/terminal/nvim/config/lua/init.lua → modules/home/programs/nvim/config/lua/init.lua
Executable file → Normal file
16
modules/home/programs/terminal/nvim/config/lua/init.lua → modules/home/programs/nvim/config/lua/init.lua
Executable file → Normal file
@@ -1,19 +1,23 @@
|
|||||||
require("base")
|
require("base")
|
||||||
|
require("aerial-config")
|
||||||
require("autopairs-config")
|
require("autopairs-config")
|
||||||
require("cmp-config")
|
require("cmp-config")
|
||||||
require("comment-config")
|
require("comment-config")
|
||||||
require("dap-config")
|
require("dap-config")
|
||||||
require("diagnostics-config")
|
require("diffview-config")
|
||||||
require("git-config")
|
require("git-ref")
|
||||||
|
require("git-signs")
|
||||||
|
require("llm")
|
||||||
require("leap-config")
|
require("leap-config")
|
||||||
require("llm-config")
|
|
||||||
require("lsp-config")
|
require("lsp-config")
|
||||||
|
require("lsp-lines-config")
|
||||||
require("lualine-config")
|
require("lualine-config")
|
||||||
|
require("neotree-config")
|
||||||
require("noice-config")
|
require("noice-config")
|
||||||
require("numb-config")
|
require("numb-config")
|
||||||
require("octo-config")
|
require("silicon-config")
|
||||||
require("snacks-config")
|
require("telescope-config")
|
||||||
require("toggleterm-config")
|
require("toggleterm-config")
|
||||||
require("ts-config")
|
require("ts-config")
|
||||||
require("weird-chars")
|
|
||||||
require("which-key-config")
|
require("which-key-config")
|
||||||
|
require("weird-chars")
|
||||||
0
modules/home/programs/terminal/nvim/config/lua/leap-config.lua → modules/home/programs/nvim/config/lua/leap-config.lua
Executable file → Normal file
0
modules/home/programs/terminal/nvim/config/lua/leap-config.lua → modules/home/programs/nvim/config/lua/leap-config.lua
Executable file → Normal file
20
modules/home/programs/nvim/config/lua/llm.lua
Normal file
20
modules/home/programs/nvim/config/lua/llm.lua
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
-- Configure LLama LLM
|
||||||
|
vim.g.llama_config = {
|
||||||
|
endpoint = "http://10.0.50.120:8080/infill",
|
||||||
|
api_key = "",
|
||||||
|
n_prefix = 256,
|
||||||
|
n_suffix = 64,
|
||||||
|
n_predict = 256,
|
||||||
|
t_max_prompt_ms = 500,
|
||||||
|
t_max_predict_ms = 500,
|
||||||
|
show_info = 2,
|
||||||
|
auto_fim = true,
|
||||||
|
max_line_suffix = 8,
|
||||||
|
max_cache_keys = 256,
|
||||||
|
ring_n_chunks = 8,
|
||||||
|
ring_chunk_size = 32,
|
||||||
|
ring_scope = 512,
|
||||||
|
ring_update_ms = 1000,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- require("gen").setup({ model = "codegemma" })
|
||||||
237
modules/home/programs/nvim/config/lua/lsp-config.lua
Normal file
237
modules/home/programs/nvim/config/lua/lsp-config.lua
Normal file
@@ -0,0 +1,237 @@
|
|||||||
|
------------------------------------------------------
|
||||||
|
------------------- Custom Settings ------------------
|
||||||
|
------------------------------------------------------
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = "go",
|
||||||
|
callback = function()
|
||||||
|
vim.bo.textwidth = 120
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.filetype.add({
|
||||||
|
extension = {
|
||||||
|
templ = "templ",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
------------------------------------------------------
|
||||||
|
-------------------- Built-in LSP --------------------
|
||||||
|
------------------------------------------------------
|
||||||
|
local nix_vars = require("nix-vars")
|
||||||
|
local nvim_lsp = require("lspconfig")
|
||||||
|
|
||||||
|
local on_attach = function(client, bufnr)
|
||||||
|
local bufopts = { noremap = true, silent = true, buffer = bufnr }
|
||||||
|
|
||||||
|
if client.supports_method("textDocument/formatting") then
|
||||||
|
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
|
||||||
|
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||||
|
group = augroup,
|
||||||
|
buffer = bufnr,
|
||||||
|
callback = function()
|
||||||
|
vim.lsp.buf.format({ async = false, timeout_ms = 2000 })
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.keymap.set("n", "K", vim.lsp.buf.hover, bufopts)
|
||||||
|
vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, bufopts)
|
||||||
|
vim.keymap.set("n", "<leader>lD", vim.lsp.buf.declaration, bufopts)
|
||||||
|
vim.keymap.set("n", "<leader>ld", vim.lsp.buf.definition, bufopts)
|
||||||
|
vim.keymap.set("n", "<leader>li", vim.lsp.buf.implementation, bufopts)
|
||||||
|
vim.keymap.set("n", "<leader>ln", vim.lsp.buf.rename, bufopts)
|
||||||
|
vim.keymap.set("n", "<leader>lr", vim.lsp.buf.references, bufopts)
|
||||||
|
vim.keymap.set("n", "<leader>lt", vim.lsp.buf.type_definition, bufopts)
|
||||||
|
vim.keymap.set("n", "<leader>lf", function()
|
||||||
|
vim.lsp.buf.format({ async = true, timeout_ms = 2000 })
|
||||||
|
end, bufopts)
|
||||||
|
end
|
||||||
|
|
||||||
|
local on_attach_no_formatting = function(client, bufnr)
|
||||||
|
-- Disable Formatting
|
||||||
|
client.server_capabilities.documentFormattingProvider = false
|
||||||
|
client.server_capabilities.documentRangeFormattingProvider = false
|
||||||
|
on_attach(client, bufnr)
|
||||||
|
end
|
||||||
|
|
||||||
|
local organize_go_imports = function()
|
||||||
|
local encoding = vim.lsp.util._get_offset_encoding()
|
||||||
|
local params = vim.lsp.util.make_range_params(nil, encoding)
|
||||||
|
params.context = { only = { "source.organizeImports" } }
|
||||||
|
|
||||||
|
local result = vim.lsp.buf_request_sync(0, "textDocument/codeAction", params, 3000)
|
||||||
|
for _, res in pairs(result or {}) do
|
||||||
|
for _, r in pairs(res.result or {}) do
|
||||||
|
if r.edit then
|
||||||
|
vim.lsp.util.apply_workspace_edit(r.edit, encoding)
|
||||||
|
else
|
||||||
|
vim.lsp.buf.execute_command(r.command)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Define LSP Flags & Capabilities
|
||||||
|
local lsp_flags = { debounce_text_changes = 150 }
|
||||||
|
local capabilities = require("cmp_nvim_lsp").default_capabilities()
|
||||||
|
|
||||||
|
-- Python LSP Configuration
|
||||||
|
nvim_lsp.pyright.setup({
|
||||||
|
on_attach = on_attach,
|
||||||
|
flags = lsp_flags,
|
||||||
|
capabilities = capabilities,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- HTML LSP Configuration
|
||||||
|
nvim_lsp.html.setup({
|
||||||
|
on_attach = on_attach_no_formatting,
|
||||||
|
flags = lsp_flags,
|
||||||
|
capabilities = capabilities,
|
||||||
|
cmd = { nix_vars.vscls .. "/bin/vscode-html-language-server", "--stdio" },
|
||||||
|
})
|
||||||
|
|
||||||
|
-- JSON LSP Configuration
|
||||||
|
nvim_lsp.jsonls.setup({
|
||||||
|
on_attach = on_attach_no_formatting,
|
||||||
|
flags = lsp_flags,
|
||||||
|
capabilities = capabilities,
|
||||||
|
cmd = { nix_vars.vscls .. "/bin/vscode-html-language-server", "--stdio" },
|
||||||
|
})
|
||||||
|
|
||||||
|
-- CSS LSP Configuration
|
||||||
|
nvim_lsp.cssls.setup({
|
||||||
|
on_attach = on_attach_no_formatting,
|
||||||
|
flags = lsp_flags,
|
||||||
|
capabilities = capabilities,
|
||||||
|
cmd = { nix_vars.vscls .. "/bin/vscode-html-language-server", "--stdio" },
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Typescript / Javascript LSP Configuration
|
||||||
|
nvim_lsp.ts_ls.setup({
|
||||||
|
on_attach = on_attach_no_formatting,
|
||||||
|
flags = lsp_flags,
|
||||||
|
capabilities = capabilities,
|
||||||
|
cmd = { nix_vars.tsls, "--stdio" },
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Svelte LSP Configuration
|
||||||
|
nvim_lsp.svelte.setup({
|
||||||
|
on_attach = on_attach_no_formatting,
|
||||||
|
flags = lsp_flags,
|
||||||
|
capabilities = capabilities,
|
||||||
|
cmd = { nix_vars.sveltels, "--stdio" },
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Lua LSP Configuration
|
||||||
|
nvim_lsp.lua_ls.setup({
|
||||||
|
on_attach = on_attach_no_formatting,
|
||||||
|
flags = lsp_flags,
|
||||||
|
capabilities = capabilities,
|
||||||
|
cmd = { nix_vars.luals },
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Templ LSP Configuration
|
||||||
|
nvim_lsp.templ.setup({
|
||||||
|
on_attach = on_attach,
|
||||||
|
flags = lsp_flags,
|
||||||
|
capabilities = capabilities,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Nix LSP Configuration
|
||||||
|
nvim_lsp.nil_ls.setup({
|
||||||
|
on_attach = on_attach,
|
||||||
|
flags = lsp_flags,
|
||||||
|
capabilities = capabilities,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Go LSP Configuration
|
||||||
|
nvim_lsp.gopls.setup({
|
||||||
|
on_attach = function(client, bufnr)
|
||||||
|
on_attach(client, bufnr)
|
||||||
|
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||||
|
group = augroup,
|
||||||
|
buffer = bufnr,
|
||||||
|
callback = organize_go_imports,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
flags = lsp_flags,
|
||||||
|
capabilities = capabilities,
|
||||||
|
cmd = { nix_vars.gopls },
|
||||||
|
settings = {
|
||||||
|
gopls = {
|
||||||
|
buildFlags = { "-tags=e2e" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Go LSP Linting
|
||||||
|
nvim_lsp.golangci_lint_ls.setup({
|
||||||
|
on_attach = on_attach_no_formatting,
|
||||||
|
flags = lsp_flags,
|
||||||
|
capabilities = capabilities,
|
||||||
|
cmd = { nix_vars.golintls },
|
||||||
|
init_options = {
|
||||||
|
command = {
|
||||||
|
"golangci-lint",
|
||||||
|
"run",
|
||||||
|
"--out-format",
|
||||||
|
"json",
|
||||||
|
"--issues-exit-code=1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
------------------------------------------------------
|
||||||
|
--------------------- Null-LS LSP --------------------
|
||||||
|
------------------------------------------------------
|
||||||
|
local null_ls = require("null-ls")
|
||||||
|
|
||||||
|
local eslintFiles = {
|
||||||
|
".eslintrc",
|
||||||
|
".eslintrc.js",
|
||||||
|
".eslintrc.cjs",
|
||||||
|
".eslintrc.yaml",
|
||||||
|
".eslintrc.yml",
|
||||||
|
".eslintrc.json",
|
||||||
|
"eslint.config.js",
|
||||||
|
"eslint.config.mjs",
|
||||||
|
"eslint.config.cjs",
|
||||||
|
"eslint.config.ts",
|
||||||
|
"eslint.config.mts",
|
||||||
|
"eslint.config.cts",
|
||||||
|
}
|
||||||
|
|
||||||
|
has_eslint_in_parents = function(fname)
|
||||||
|
root_file = nvim_lsp.util.insert_package_json(eslintFiles, "eslintConfig", fname)
|
||||||
|
return nvim_lsp.util.root_pattern(unpack(root_file))(fname)
|
||||||
|
end
|
||||||
|
|
||||||
|
null_ls.setup({
|
||||||
|
sources = {
|
||||||
|
-- Prettier Formatting
|
||||||
|
null_ls.builtins.formatting.prettier,
|
||||||
|
null_ls.builtins.formatting.prettier.with({ filetypes = { "template" } }),
|
||||||
|
require("none-ls.diagnostics.eslint_d").with({
|
||||||
|
condition = function(utils)
|
||||||
|
return has_eslint_in_parents(vim.fn.getcwd())
|
||||||
|
end,
|
||||||
|
}),
|
||||||
|
null_ls.builtins.completion.spell,
|
||||||
|
null_ls.builtins.formatting.nixpkgs_fmt,
|
||||||
|
null_ls.builtins.formatting.stylua,
|
||||||
|
null_ls.builtins.diagnostics.sqlfluff,
|
||||||
|
null_ls.builtins.formatting.sqlfluff,
|
||||||
|
},
|
||||||
|
on_attach = function(client, bufnr)
|
||||||
|
if client.supports_method("textDocument/formatting") then
|
||||||
|
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
|
||||||
|
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||||
|
group = augroup,
|
||||||
|
buffer = bufnr,
|
||||||
|
callback = function()
|
||||||
|
vim.lsp.buf.format({ async = false, timeout_ms = 2000 })
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
require("lsp_lines").setup()
|
||||||
|
vim.diagnostic.config({virtual_text = false})
|
||||||
49
modules/home/programs/nvim/config/lua/lualine-config.lua
Normal file
49
modules/home/programs/nvim/config/lua/lualine-config.lua
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
-- Cached variable
|
||||||
|
local cached_pr_status = ""
|
||||||
|
|
||||||
|
-- Read process output
|
||||||
|
local function read_output(err, data)
|
||||||
|
if err then return end
|
||||||
|
if not data then return end
|
||||||
|
cached_pr_status = data
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Spawn process
|
||||||
|
local function execute_command()
|
||||||
|
local stdout = vim.loop.new_pipe(false)
|
||||||
|
|
||||||
|
local spawn_opts = {
|
||||||
|
detached = true,
|
||||||
|
stdio = {nil, stdout, nil},
|
||||||
|
args = {"-c", "gh pr checks | awk -F'\t' '{ print $2 }'"}
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.loop.spawn("bash", spawn_opts,
|
||||||
|
function() stdout:read_start(read_output) end)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Spawn & schedule process
|
||||||
|
execute_command()
|
||||||
|
vim.fn.timer_start(300000, execute_command)
|
||||||
|
|
||||||
|
-- Return status from cache
|
||||||
|
function pr_status()
|
||||||
|
--
|
||||||
|
--
|
||||||
|
--
|
||||||
|
-- PENDING COLOR - #d29922
|
||||||
|
-- PASS COLOR - #3fb950
|
||||||
|
-- FAIL COLOR - #f85149
|
||||||
|
return cached_pr_status:gsub("\n", ""):gsub("fail", " "):gsub("pass",
|
||||||
|
" ")
|
||||||
|
:gsub("pending", " "):gsub("skipping", " "):sub(1, -2)
|
||||||
|
end
|
||||||
|
|
||||||
|
require('lualine').setup({
|
||||||
|
options = {
|
||||||
|
theme = "gruvbox_dark"
|
||||||
|
-- theme = "nord"
|
||||||
|
-- theme = "OceanicNext",
|
||||||
|
},
|
||||||
|
sections = {lualine_c = {{pr_status}}}
|
||||||
|
})
|
||||||
2
modules/home/programs/nvim/config/lua/neotree-config.lua
Normal file
2
modules/home/programs/nvim/config/lua/neotree-config.lua
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
require("neo-tree").setup({ window = { mappings = { ["<space>"] = "none" } } })
|
||||||
|
vim.keymap.set("n", "<leader>t", ":Neotree toggle<CR>", { silent = true })
|
||||||
26
modules/home/programs/nvim/config/lua/noice-config.lua
Normal file
26
modules/home/programs/nvim/config/lua/noice-config.lua
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
-- Noice Doc Scrolling
|
||||||
|
vim.keymap.set("n", "<c-f>", function()
|
||||||
|
if not require("noice.lsp").scroll(4) then return "<c-f>" end
|
||||||
|
end, {silent = true, expr = true})
|
||||||
|
|
||||||
|
vim.keymap.set("n", "<c-b>", function()
|
||||||
|
if not require("noice.lsp").scroll(-4) then return "<c-b>" end
|
||||||
|
end, {silent = true, expr = true})
|
||||||
|
|
||||||
|
-- Noice Setup
|
||||||
|
require("noice").setup({
|
||||||
|
lsp = {
|
||||||
|
override = {
|
||||||
|
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
|
||||||
|
["vim.lsp.util.stylize_markdown"] = true,
|
||||||
|
["cmp.entry.get_documentation"] = false
|
||||||
|
},
|
||||||
|
signature = {enabled = false}
|
||||||
|
},
|
||||||
|
presets = {
|
||||||
|
command_palette = true, -- position the cmdline and popupmenu together
|
||||||
|
long_message_to_split = true, -- long messages will be sent to a split
|
||||||
|
inc_rename = false, -- enables an input dialog for inc-rename.nvim
|
||||||
|
lsp_doc_border = false -- add a border to hover docs and signature help
|
||||||
|
}
|
||||||
|
})
|
||||||
0
modules/home/programs/terminal/nvim/config/lua/numb-config.lua → modules/home/programs/nvim/config/lua/numb-config.lua
Executable file → Normal file
0
modules/home/programs/terminal/nvim/config/lua/numb-config.lua → modules/home/programs/nvim/config/lua/numb-config.lua
Executable file → Normal file
10
modules/home/programs/nvim/config/lua/silicon-config.lua
Normal file
10
modules/home/programs/nvim/config/lua/silicon-config.lua
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
local silicon = require('silicon')
|
||||||
|
silicon.setup({})
|
||||||
|
|
||||||
|
vim.keymap.set('v', '<Leader>ss', function() silicon.visualise_api({}) end)
|
||||||
|
vim.keymap.set('v', '<Leader>sb',
|
||||||
|
function() silicon.visualise_api({show_buf = true}) end)
|
||||||
|
vim.keymap.set('n', '<Leader>sv',
|
||||||
|
function() silicon.visualise_api({visible = true}) end)
|
||||||
|
vim.keymap.set('n', '<Leader>sb',
|
||||||
|
function() silicon.visualise_api({show_buf = true}) end)
|
||||||
20
modules/home/programs/nvim/config/lua/telescope-config.lua
Normal file
20
modules/home/programs/nvim/config/lua/telescope-config.lua
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
require('telescope').setup {
|
||||||
|
extensions = {
|
||||||
|
fzf = {
|
||||||
|
fuzzy = true,
|
||||||
|
override_generic_sorter = true,
|
||||||
|
override_file_sorter = true,
|
||||||
|
case_mode = "smart_case"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
require('telescope').load_extension('fzf')
|
||||||
|
require("telescope").load_extension("ui-select")
|
||||||
|
|
||||||
|
local builtin = require('telescope.builtin')
|
||||||
|
vim.keymap.set('n', '<leader>ff', builtin.find_files, {})
|
||||||
|
vim.keymap.set('n', '<leader>fg', builtin.live_grep, {})
|
||||||
|
vim.keymap.set('n', '<leader>fb', builtin.buffers, {})
|
||||||
|
vim.keymap.set('n', '<leader>fh', builtin.help_tags, {})
|
||||||
|
vim.keymap.set('n', '<leader>fj', builtin.jumplist, {})
|
||||||
20
modules/home/programs/nvim/config/lua/toggleterm-config.lua
Normal file
20
modules/home/programs/nvim/config/lua/toggleterm-config.lua
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
require("toggleterm").setup({open_mapping = [[<c-\>]]})
|
||||||
|
|
||||||
|
-- Get PR status on terminal load
|
||||||
|
-- require("toggleterm").setup({
|
||||||
|
-- open_mapping = [[<c-\>]],
|
||||||
|
-- on_create = function(term)
|
||||||
|
-- vim.cmd("startinsert")
|
||||||
|
-- term:send("gh pr checks")
|
||||||
|
-- end
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- Duplicate C-w & Esc Behavior
|
||||||
|
function _G.set_terminal_keymaps()
|
||||||
|
local opts = {buffer = 0}
|
||||||
|
vim.opt.signcolumn = "no"
|
||||||
|
vim.keymap.set('t', '<esc>', [[<C-\><C-n>]], opts)
|
||||||
|
vim.keymap.set('t', '<C-w>', [[<C-\><C-n><C-w>]], opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()')
|
||||||
3
modules/home/programs/nvim/config/lua/ts-config.lua
Normal file
3
modules/home/programs/nvim/config/lua/ts-config.lua
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
highlight = {enable = true, additional_vim_regex_highlighting = false}
|
||||||
|
}
|
||||||
0
modules/home/programs/terminal/nvim/config/lua/weird-chars.lua → modules/home/programs/nvim/config/lua/weird-chars.lua
Executable file → Normal file
0
modules/home/programs/terminal/nvim/config/lua/weird-chars.lua → modules/home/programs/nvim/config/lua/weird-chars.lua
Executable file → Normal file
47
modules/home/programs/nvim/config/lua/which-key-config.lua
Normal file
47
modules/home/programs/nvim/config/lua/which-key-config.lua
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
local wk = require("which-key")
|
||||||
|
|
||||||
|
wk.setup({})
|
||||||
|
|
||||||
|
wk.add({
|
||||||
|
{ "<C-k>", desc = "Signature Help" },
|
||||||
|
{ "<leader>a", desc = "Aerial" },
|
||||||
|
{ "<leader>d", group = "Debug" },
|
||||||
|
{ "<leader>db", desc = "Toggle Breakpoint" },
|
||||||
|
{ "<leader>dc", desc = "Continue" },
|
||||||
|
{ "<leader>dt", desc = "Run Test" },
|
||||||
|
{ "<leader>du", desc = "Toggle UI" },
|
||||||
|
{ "<leader>f", group = "Find - Telescope" },
|
||||||
|
{ "<leader>fb", "<cmd>Telescope buffers<cr>", desc = "Find Buffer" },
|
||||||
|
{ "<leader>ff", "<cmd>Telescope find_files<cr>", desc = "Find File" },
|
||||||
|
{ "<leader>fg", "<cmd>Telescope live_grep<cr>", desc = "Live Grep" },
|
||||||
|
{ "<leader>fh", "<cmd>Telescope help_tags<cr>", desc = "Help Tags" },
|
||||||
|
{ "<leader>fj", "<cmd>Telescope jumplist<cr>", desc = "Jump List" },
|
||||||
|
{ "<leader>g", group = "DiffView" },
|
||||||
|
{ "<leader>gB", desc = "Git Blame Full" },
|
||||||
|
{ "<leader>gH", "<cmd>DiffviewFileHistory --range=origin..HEAD<cr>", desc = "Diff History - Main" },
|
||||||
|
{ "<leader>gO", "<cmd>DiffviewOpen origin/main...HEAD<cr>", desc = "Open Diff - Main" },
|
||||||
|
{ "<leader>gb", desc = "Git Blame Line" },
|
||||||
|
{ "<leader>gc", "<cmd>DiffviewClose<cr>", desc = "Close Diff" },
|
||||||
|
{ "<leader>gh", "<cmd>DiffviewFileHistory<cr>", desc = "Diff History" },
|
||||||
|
{ "<leader>go", "<cmd>DiffviewOpen<cr>", desc = "Open Diff - Current" },
|
||||||
|
{ "<leader>l", group = "LSP" },
|
||||||
|
{ "<leader>lD", desc = "Declaration" },
|
||||||
|
{ "<leader>ld", desc = "Definition" },
|
||||||
|
{ "<leader>lf", desc = "Format" },
|
||||||
|
{ "<leader>li", desc = "Implementation" },
|
||||||
|
{ "<leader>ln", desc = "Rename" },
|
||||||
|
{ "<leader>lr", desc = "References" },
|
||||||
|
{ "<leader>lt", desc = "Type Definition" },
|
||||||
|
{ "<leader>q", group = "Diagnostics" },
|
||||||
|
{ "<leader>qN", desc = "Previous Diagnostic" },
|
||||||
|
{ "<leader>qe", desc = "Open Diagnostic Float" },
|
||||||
|
{ "<leader>qn", desc = "Next Diagnostic" },
|
||||||
|
{ "<leader>qq", desc = "Toggle Diagnostic List" },
|
||||||
|
{ "<leader>qt", desc = "Toggle Inline Diagnostics" },
|
||||||
|
{ "<leader>sv", desc = "Visual Screenshot" },
|
||||||
|
{ "<leader>t", desc = "NeoTree" },
|
||||||
|
{ "K", desc = "Definition Hover" },
|
||||||
|
{ "<leader>ss", desc = "Selected Screenshot", mode = "v" },
|
||||||
|
{ "<leader>s", group = "Screenshot", mode = { "n", "v" } },
|
||||||
|
{ "<leader>sb", desc = "Buffer Screenshot", mode = { "n", "v" } },
|
||||||
|
})
|
||||||
149
modules/home/programs/terminal/nvim/default.nix → modules/home/programs/nvim/default.nix
Executable file → Normal file
149
modules/home/programs/terminal/nvim/default.nix → modules/home/programs/nvim/default.nix
Executable file → Normal file
@@ -1,15 +1,10 @@
|
|||||||
{ pkgs
|
{ pkgs, lib, config, namespace, ... }:
|
||||||
, lib
|
|
||||||
, config
|
|
||||||
, namespace
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
let
|
||||||
inherit (lib) mkIf;
|
inherit (lib) mkIf;
|
||||||
cfg = config.${namespace}.programs.terminal.nvim;
|
cfg = config.${namespace}.programs.nvim;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.${namespace}.programs.terminal.nvim = {
|
options.${namespace}.programs.nvim = {
|
||||||
enable = lib.mkEnableOption "NeoVim";
|
enable = lib.mkEnableOption "NeoVim";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -39,29 +34,30 @@ in
|
|||||||
# -------------------
|
# -------------------
|
||||||
# ----- Helpers -----
|
# ----- Helpers -----
|
||||||
# -------------------
|
# -------------------
|
||||||
|
aerial-nvim # Code Outline
|
||||||
comment-nvim # Code Comments
|
comment-nvim # Code Comments
|
||||||
copilot-vim # GitHub Copilot
|
|
||||||
diffview-nvim # Diff View
|
diffview-nvim # Diff View
|
||||||
fidget-nvim # Notification Helper
|
|
||||||
gitsigns-nvim # Git Blame
|
gitsigns-nvim # Git Blame
|
||||||
leap-nvim # Quick Movement
|
leap-nvim # Quick Movement
|
||||||
markdown-preview-nvim # Markdown Preview
|
markdown-preview-nvim # Markdown Preview
|
||||||
|
neo-tree-nvim # File Explorer
|
||||||
none-ls-nvim # Formatters
|
none-ls-nvim # Formatters
|
||||||
numb-nvim # Peek / Jump to Lines
|
numb-nvim # Peek / Jump to Lines
|
||||||
nvim-autopairs # Automatically Close Pairs (),[],{}
|
nvim-autopairs # Automatically Close Pairs (),[],{}
|
||||||
octo-nvim # Git Octo
|
telescope-fzf-native-nvim # Faster Telescope
|
||||||
render-markdown-nvim # Markdown Renderer
|
|
||||||
snacks-nvim # Snacks
|
|
||||||
telescope-nvim # Fuzzy Finder
|
telescope-nvim # Fuzzy Finder
|
||||||
|
telescope-ui-select-nvim # UI
|
||||||
|
toggleterm-nvim # Terminal Helper
|
||||||
vim-nix # Nix Helpers
|
vim-nix # Nix Helpers
|
||||||
which-key-nvim # Shortcut Helper
|
which-key-nvim # Shortcut Helper
|
||||||
|
|
||||||
# ------------------
|
# ------------------
|
||||||
# --- Theme / UI ---
|
# --- Theme / UI ---
|
||||||
# ------------------
|
# ------------------
|
||||||
catppuccin-nvim # Theme
|
|
||||||
lualine-nvim # Bottom Line
|
lualine-nvim # Bottom Line
|
||||||
noice-nvim # UI Tweaks
|
noice-nvim # UI Tweaks
|
||||||
|
# nord-nvim # Theme
|
||||||
|
melange-nvim # Theme
|
||||||
nvim-notify # Noice Dependency
|
nvim-notify # Noice Dependency
|
||||||
nvim-web-devicons # Dev Icons
|
nvim-web-devicons # Dev Icons
|
||||||
|
|
||||||
@@ -78,58 +74,83 @@ in
|
|||||||
nvim-dap-go
|
nvim-dap-go
|
||||||
nvim-dap-ui
|
nvim-dap-ui
|
||||||
|
|
||||||
# --------------------
|
|
||||||
# -- CODE COMPANION --
|
|
||||||
# --------------------
|
|
||||||
(pkgs.vimUtils.buildVimPlugin {
|
|
||||||
pname = "codecompanion.nvim";
|
|
||||||
version = "2025-12-20";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "olimorris";
|
|
||||||
repo = "codecompanion.nvim";
|
|
||||||
rev = "a226ca071ebc1d8b5ae1f70800fa9cf4a06a2101";
|
|
||||||
sha256 = "sha256-F1nI7q98SPpDjlwPvGy/qFuHvlT1FrbQPcjWrBwLaHU=";
|
|
||||||
};
|
|
||||||
doCheck = false;
|
|
||||||
meta.homepage = "https://github.com/olimorris/codecompanion.nvim/";
|
|
||||||
meta.hydraPlatforms = [ ];
|
|
||||||
})
|
|
||||||
|
|
||||||
# --------------------
|
# --------------------
|
||||||
# -- NONE-LS EXTRAS --
|
# -- NONE-LS EXTRAS --
|
||||||
# --------------------
|
# --------------------
|
||||||
(pkgs.vimUtils.buildVimPlugin {
|
(
|
||||||
pname = "none-ls-extras.nvim";
|
pkgs.vimUtils.buildVimPlugin {
|
||||||
version = "2025-10-28";
|
pname = "none-ls-extras.nvim";
|
||||||
src = pkgs.fetchFromGitHub {
|
version = "2024-06-11";
|
||||||
owner = "nvimtools";
|
src = pkgs.fetchFromGitHub {
|
||||||
repo = "none-ls-extras.nvim";
|
owner = "nvimtools";
|
||||||
rev = "402c6b5c29f0ab57fac924b863709f37f55dc298";
|
repo = "none-ls-extras.nvim";
|
||||||
sha256 = "sha256-4s/xQNWNA4dgb5gZR4Xqn6zDDWrSJNtmHOmmjmYnN/8=";
|
rev = "336e84b9e43c0effb735b08798ffac382920053b";
|
||||||
};
|
sha256 = "sha256-UtU4oWSRTKdEoMz3w8Pk95sROuo3LEwxSDAm169wxwk=";
|
||||||
doCheck = false;
|
};
|
||||||
meta.homepage = "https://github.com/nvimtools/none-ls-extras.nvim/";
|
meta.homepage = "https://github.com/nvimtools/none-ls-extras.nvim/";
|
||||||
})
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
# -------------------
|
||||||
|
# ----- Silicon -----
|
||||||
|
# -------------------
|
||||||
|
(
|
||||||
|
pkgs.vimUtils.buildVimPlugin {
|
||||||
|
pname = "silicon.lua";
|
||||||
|
version = "2022-12-03";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "mhanberg";
|
||||||
|
repo = "silicon.lua";
|
||||||
|
rev = "5ca462bee0a39b058786bc7fbeb5d16ea49f3a23";
|
||||||
|
sha256 = "0vlp645d5mmii513v72jca931miyrhkvhwb9bfzhix1199zx7vi2";
|
||||||
|
};
|
||||||
|
meta.homepage = "https://github.com/mhanberg/silicon.lua/";
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
# -------------------
|
||||||
|
# ------- LLM -------
|
||||||
|
# -------------------
|
||||||
|
(
|
||||||
|
pkgs.vimUtils.buildVimPlugin {
|
||||||
|
pname = "llm.nvim";
|
||||||
|
version = "2024-05-25";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "David-Kunz";
|
||||||
|
repo = "gen.nvim";
|
||||||
|
rev = "bd19cf584b5b82123de977b44105e855e61e5f39";
|
||||||
|
sha256 = "sha256-0AEB6im8Jz5foYzmL6KEGSAYo48g1bkFpjlCSWT6JeE=";
|
||||||
|
};
|
||||||
|
meta.homepage = "https://github.com/David-Kunz/gen.nvim/";
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
# -------------------
|
# -------------------
|
||||||
# ---- LLAMA.VIM ----
|
# ---- LLAMA.VIM ----
|
||||||
# -------------------
|
# -------------------
|
||||||
(pkgs.vimUtils.buildVimPlugin {
|
(
|
||||||
pname = "llama.vim";
|
pkgs.vimUtils.buildVimPlugin {
|
||||||
version = "2025-10-28";
|
pname = "llama.vim";
|
||||||
src = pkgs.fetchFromGitHub {
|
version = "2025-01-23";
|
||||||
owner = "ggml-org";
|
src = pkgs.fetchFromGitHub {
|
||||||
repo = "llama.vim";
|
owner = "ggml-org";
|
||||||
rev = "ade8966eff57dcbe4a359dd26fb1ea97378ea03c";
|
repo = "llama.vim";
|
||||||
sha256 = "sha256-uPqOZLWKVMimhc9eG7yM5OmhJy3mTRgKsiqKhstWs4Y=";
|
rev = "143fe910b8d47a054ed464c38d8b7c17d5354468";
|
||||||
};
|
sha256 = "sha256-PW0HKzhSxcZiWzpDOuy98rl/X0o2nE7tMjZjwwh0qLE=";
|
||||||
meta.homepage = "https://github.com/ggml-org/llama.vim/";
|
};
|
||||||
})
|
meta.homepage = "https://github.com/ggml-org/llama.vim/";
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
extraPackages = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
# LSP
|
# Telescope Dependencies
|
||||||
eslint_d
|
fd
|
||||||
|
ripgrep
|
||||||
|
tree-sitter
|
||||||
|
|
||||||
|
# LSP Dependencies
|
||||||
go
|
go
|
||||||
golangci-lint
|
golangci-lint
|
||||||
golangci-lint-langserver
|
golangci-lint-langserver
|
||||||
@@ -142,17 +163,17 @@ in
|
|||||||
nodePackages.typescript-language-server
|
nodePackages.typescript-language-server
|
||||||
nodePackages.vscode-langservers-extracted
|
nodePackages.vscode-langservers-extracted
|
||||||
pyright
|
pyright
|
||||||
python312Packages.autopep8
|
eslint_d
|
||||||
|
|
||||||
# Formatters
|
# Formatters
|
||||||
luaformatter
|
luaformatter
|
||||||
nixpkgs-fmt
|
nixpkgs-fmt
|
||||||
nodePackages.prettier
|
nodePackages.prettier
|
||||||
|
sqlfluff
|
||||||
stylua
|
stylua
|
||||||
|
|
||||||
# Tools
|
# Silicon
|
||||||
ripgrep
|
silicon
|
||||||
lazygit
|
|
||||||
];
|
];
|
||||||
|
|
||||||
extraConfig = ":luafile ~/.config/nvim/lua/init.lua";
|
extraConfig = ":luafile ~/.config/nvim/lua/init.lua";
|
||||||
@@ -166,20 +187,14 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Generate Nix Vars
|
# Generate Nix Vars
|
||||||
# NOTE: https://github.com/NixOS/nixpkgs/issues/479348
|
|
||||||
# omnisharp = "${pkgs.omnisharp-roslyn}/bin/OmniSharp",
|
|
||||||
|
|
||||||
"nvim/lua/nix-vars.lua".text = ''
|
"nvim/lua/nix-vars.lua".text = ''
|
||||||
local nix_vars = {
|
local nix_vars = {
|
||||||
bash = "${pkgs.bashInteractive}/bin/bash",
|
|
||||||
clangd = "${pkgs.clang-tools}/bin/clangd",
|
|
||||||
golintls = "${pkgs.golangci-lint-langserver}/bin/golangci-lint-langserver",
|
|
||||||
gopls = "${pkgs.gopls}/bin/gopls",
|
gopls = "${pkgs.gopls}/bin/gopls",
|
||||||
luals = "${pkgs.lua-language-server}/bin/lua-language-server",
|
luals = "${pkgs.lua-language-server}/bin/lua-language-server",
|
||||||
sveltels = "${pkgs.nodePackages.svelte-language-server}/bin/svelteserver",
|
sveltels = "${pkgs.nodePackages.svelte-language-server}/bin/svelteserver",
|
||||||
tsls = "${pkgs.nodePackages.typescript-language-server}/bin/typescript-language-server",
|
tsls = "${pkgs.nodePackages.typescript-language-server}/bin/typescript-language-server",
|
||||||
|
golintls = "${pkgs.golangci-lint-langserver}/bin/golangci-lint-langserver",
|
||||||
vscls = "${pkgs.nodePackages.vscode-langservers-extracted}",
|
vscls = "${pkgs.nodePackages.vscode-langservers-extracted}",
|
||||||
sqls = "${pkgs.sqls}/bin/sqls",
|
|
||||||
}
|
}
|
||||||
return nix_vars
|
return nix_vars
|
||||||
'';
|
'';
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
.headers on
|
|
||||||
.mode column
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
{ lib
|
|
||||||
, pkgs
|
|
||||||
, config
|
|
||||||
, namespace
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (lib) mkIf;
|
|
||||||
cfg = config.${namespace}.programs.terminal.btop;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.programs.terminal.btop = {
|
|
||||||
enable = lib.mkEnableOption "btop";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.btop = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.btop-cuda;
|
|
||||||
};
|
|
||||||
|
|
||||||
home.file.".config/btop/btop.conf".text = builtins.readFile ./config/btop.conf;
|
|
||||||
home.file.".config/btop/themes/catppuccin_mocha.theme".text =
|
|
||||||
builtins.readFile ./config/catppuccin_mocha.theme;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
{ lib
|
|
||||||
, pkgs
|
|
||||||
, config
|
|
||||||
, namespace
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (lib) mkIf;
|
|
||||||
cfg = config.${namespace}.programs.terminal.claude-code;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.${namespace}.programs.terminal.claude-code = {
|
|
||||||
enable = lib.mkEnableOption "enable claude-code";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.claude-code = {
|
|
||||||
enable = true;
|
|
||||||
mcpServers = {
|
|
||||||
gopls = {
|
|
||||||
type = "stdio";
|
|
||||||
command = "gopls";
|
|
||||||
args = [ "mcp" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.bash = lib.mkIf config.programs.bash.enable {
|
|
||||||
shellAliases = {
|
|
||||||
claude = "default_claude_custom";
|
|
||||||
};
|
|
||||||
|
|
||||||
initExtra =
|
|
||||||
let
|
|
||||||
baseUrl = "https://llm-api.va.reichard.io";
|
|
||||||
authToken = "placeholder";
|
|
||||||
in
|
|
||||||
''
|
|
||||||
default_claude_custom() {
|
|
||||||
local model_id=""
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case $1 in
|
|
||||||
-m|--model)
|
|
||||||
model_id="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$model_id" ]; then
|
|
||||||
echo "Error: Model ID is required. Usage: claude --model <model-id>"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
ANTHROPIC_BASE_URL="${baseUrl}" \
|
|
||||||
ANTHROPIC_AUTH_TOKEN="${authToken}" \
|
|
||||||
ANTHROPIC_MODEL="$model_id" \
|
|
||||||
ANTHROPIC_SMALL_FAST_MODEL="$model_id" \
|
|
||||||
${lib.getExe pkgs.claude-code}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Completion Function
|
|
||||||
_complete_claude_custom() {
|
|
||||||
local cur=''${COMP_WORDS[COMP_CWORD]}
|
|
||||||
local prev=''${COMP_WORDS[COMP_CWORD-1]}
|
|
||||||
|
|
||||||
if [[ "$prev" == "-m" || "$prev" == "--model" ]]; then
|
|
||||||
local models=( $(${pkgs.curl}/bin/curl -s -H "Authorization: Bearer ${authToken}" "${baseUrl}/v1/models" | ${pkgs.jq}/bin/jq -r '.data[].id' 2>/dev/null) )
|
|
||||||
COMPREPLY=( $(compgen -W "''${models[*]}" -- "$cur") )
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Register Completion
|
|
||||||
complete -F _complete_claude_custom claude
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
_scratch
|
|
||||||
.direnv
|
|
||||||
.envrc
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
-- Set Theme
|
|
||||||
-- vim.g.nord_borders = true
|
|
||||||
-- vim.g.nord_contrast = true
|
|
||||||
-- vim.cmd('colorscheme nord')
|
|
||||||
-- vim.cmd('colorscheme melange')
|
|
||||||
vim.cmd("colorscheme catppuccin-mocha")
|
|
||||||
|
|
||||||
-- Set User Shell
|
|
||||||
vim.o.shell = require("nix-vars").bash
|
|
||||||
|
|
||||||
-- Set Leader
|
|
||||||
vim.keymap.set("n", "<Space>", "<Nop>", { silent = true })
|
|
||||||
vim.g.mapleader = " "
|
|
||||||
|
|
||||||
-- Set Timeout
|
|
||||||
vim.opt.timeoutlen = 250
|
|
||||||
|
|
||||||
-- Disable NetRW
|
|
||||||
vim.g.loaded_netrw = 1
|
|
||||||
vim.g.loaded_netrwPlugin = 1
|
|
||||||
|
|
||||||
-- Set Term Colors
|
|
||||||
vim.opt.termguicolors = true
|
|
||||||
|
|
||||||
-- Synchronize with system clipboard
|
|
||||||
vim.opt.clipboard:append("unnamedplus")
|
|
||||||
|
|
||||||
-- Always show the signcolumn
|
|
||||||
vim.opt.signcolumn = "yes"
|
|
||||||
|
|
||||||
-- Set nowrap, line numbers, hightlight search
|
|
||||||
vim.opt.wrap = false
|
|
||||||
vim.opt.nu = true
|
|
||||||
vim.opt.hlsearch = true
|
|
||||||
vim.opt.shiftwidth = 2
|
|
||||||
|
|
||||||
-- Set fold settings
|
|
||||||
vim.opt.foldmethod = "indent"
|
|
||||||
vim.opt.foldnestmax = 10
|
|
||||||
vim.opt.foldlevel = 2
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
local cmp = require('cmp')
|
|
||||||
require("luasnip.loaders.from_vscode").lazy_load()
|
|
||||||
|
|
||||||
-- Check Tab Completion
|
|
||||||
local has_words_before = function()
|
|
||||||
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
|
||||||
return col ~= 0 and
|
|
||||||
vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col,
|
|
||||||
col)
|
|
||||||
:match("%s") == nil
|
|
||||||
end
|
|
||||||
|
|
||||||
cmp.setup({
|
|
||||||
snippet = {
|
|
||||||
expand = function(args) require 'luasnip'.lsp_expand(args.body) end
|
|
||||||
},
|
|
||||||
|
|
||||||
mapping = cmp.mapping.preset.insert({
|
|
||||||
|
|
||||||
-- Tab Completion
|
|
||||||
["<Tab>"] = cmp.mapping(function(fallback)
|
|
||||||
if cmp.visible() then
|
|
||||||
cmp.select_next_item()
|
|
||||||
elseif has_words_before() then
|
|
||||||
cmp.complete()
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end, { "i", "s" }),
|
|
||||||
|
|
||||||
-- Reverse Tab Completion
|
|
||||||
["<S-Tab>"] = cmp.mapping(function(fallback)
|
|
||||||
if cmp.visible() then
|
|
||||||
cmp.select_prev_item()
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end, { "i", "s" }),
|
|
||||||
|
|
||||||
-- Misc Mappings
|
|
||||||
['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
|
||||||
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
|
||||||
['<C-Space>'] = cmp.mapping.complete(),
|
|
||||||
['<C-e>'] = cmp.mapping.abort(),
|
|
||||||
['<CR>'] = cmp.mapping.confirm({ select = true })
|
|
||||||
|
|
||||||
}),
|
|
||||||
|
|
||||||
-- Default Sources
|
|
||||||
sources = cmp.config.sources({
|
|
||||||
{ name = 'nvim_lsp' }, { name = 'luasnip' }, { name = 'path' },
|
|
||||||
{ name = 'buffer' }
|
|
||||||
})
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Completion - `/` and `?`
|
|
||||||
cmp.setup.cmdline({ '/', '?' }, {
|
|
||||||
mapping = cmp.mapping.preset.cmdline(),
|
|
||||||
sources = { { name = 'buffer' } }
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Completion = `:`
|
|
||||||
cmp.setup.cmdline(':', {
|
|
||||||
mapping = cmp.mapping.preset.cmdline(),
|
|
||||||
sources = cmp.config.sources({ { name = 'path' }, { name = 'cmdline' } })
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Autopairs
|
|
||||||
local cmp_autopairs = require('nvim-autopairs.completion.cmp')
|
|
||||||
cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done())
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
local dap = require("dap")
|
|
||||||
local dapui = require("dapui")
|
|
||||||
local dapgo = require("dap-go")
|
|
||||||
|
|
||||||
dapui.setup({
|
|
||||||
controls = {
|
|
||||||
element = "repl",
|
|
||||||
enabled = true,
|
|
||||||
icons = {
|
|
||||||
disconnect = "",
|
|
||||||
pause = "",
|
|
||||||
play = "",
|
|
||||||
run_last = "",
|
|
||||||
step_back = "",
|
|
||||||
step_into = "",
|
|
||||||
step_out = "",
|
|
||||||
step_over = "",
|
|
||||||
terminate = ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
element_mappings = {},
|
|
||||||
expand_lines = false,
|
|
||||||
floating = { border = "single", mappings = { close = { "q", "<Esc>" } } },
|
|
||||||
force_buffers = true,
|
|
||||||
icons = { collapsed = "", current_frame = "", expanded = "" },
|
|
||||||
layouts = {
|
|
||||||
{
|
|
||||||
elements = { { id = "repl", size = 0.5 }, { id = "scopes", size = 0.5 } },
|
|
||||||
position = "bottom",
|
|
||||||
size = 10
|
|
||||||
}, {
|
|
||||||
elements = {
|
|
||||||
{ id = "breakpoints", size = 0.5 }, { id = "stacks", size = 0.5 }
|
|
||||||
},
|
|
||||||
position = "left",
|
|
||||||
size = 40
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mappings = {
|
|
||||||
edit = "e",
|
|
||||||
expand = { "<CR>", "<2-LeftMouse>" },
|
|
||||||
open = "o",
|
|
||||||
remove = "d",
|
|
||||||
repl = "r",
|
|
||||||
toggle = "t"
|
|
||||||
},
|
|
||||||
render = { indent = 1, max_value_lines = 100 }
|
|
||||||
})
|
|
||||||
dapgo.setup()
|
|
||||||
|
|
||||||
-- Auto Open UI
|
|
||||||
dap.listeners.before.attach.dapui_config = function() dapui.open() end
|
|
||||||
dap.listeners.before.launch.dapui_config = function() dapui.open() end
|
|
||||||
|
|
||||||
-- Continue Hotkey ("c")
|
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
|
||||||
pattern = "dap-repl",
|
|
||||||
callback = function()
|
|
||||||
vim.api.nvim_buf_set_keymap(0, 'n', 'c',
|
|
||||||
"<cmd>lua require'dap'.continue()<CR>",
|
|
||||||
{ noremap = true, silent = true })
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Create KeyMaps
|
|
||||||
local opts = { noremap = true, silent = true }
|
|
||||||
vim.keymap.set('n', '<leader>db', dap.toggle_breakpoint, vim.tbl_extend("force", { desc = "Toggle Breakpoint" }, opts))
|
|
||||||
vim.keymap.set('n', '<leader>dc', dap.continue, vim.tbl_extend("force", { desc = "Continue" }, opts))
|
|
||||||
vim.keymap.set('n', '<leader>dt', dapgo.debug_test, vim.tbl_extend("force", { desc = "Run Test" }, opts))
|
|
||||||
vim.keymap.set('n', '<leader>du', dapui.toggle, vim.tbl_extend("force", { desc = "Toggle UI" }, opts))
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
-- Diagnostics Mappings
|
|
||||||
local diagnostics_active = true
|
|
||||||
local toggle_diagnostics = function()
|
|
||||||
diagnostics_active = not diagnostics_active
|
|
||||||
if diagnostics_active then
|
|
||||||
vim.diagnostic.enable()
|
|
||||||
else
|
|
||||||
vim.diagnostic.disable()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local diagnostics_loclist_active = false
|
|
||||||
local toggle_diagnostics_loclist = function()
|
|
||||||
diagnostics_loclist_active = not diagnostics_loclist_active
|
|
||||||
if diagnostics_loclist_active then
|
|
||||||
vim.diagnostic.setloclist()
|
|
||||||
else
|
|
||||||
vim.cmd("lclose")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Create KeyMaps
|
|
||||||
local opts = { noremap = true, silent = true }
|
|
||||||
vim.keymap.set("n", "<leader>qN", function()
|
|
||||||
vim.diagnostic.goto_prev({ float = false })
|
|
||||||
end, vim.tbl_extend("force", { desc = "Previous Diagnostic" }, opts))
|
|
||||||
vim.keymap.set("n", "<leader>qe", vim.diagnostic.open_float,
|
|
||||||
vim.tbl_extend("force", { desc = "Open Diagnostics" }, opts))
|
|
||||||
vim.keymap.set("n", "<leader>qt", toggle_diagnostics,
|
|
||||||
vim.tbl_extend("force", { desc = "Toggle Inline Diagnostics" }, opts))
|
|
||||||
vim.keymap.set("n", "<leader>qn", function()
|
|
||||||
vim.diagnostic.goto_next({ float = false })
|
|
||||||
end, vim.tbl_extend("force", { desc = "Next Diagnostic" }, opts))
|
|
||||||
vim.keymap.set("n", "<leader>qq", toggle_diagnostics_loclist,
|
|
||||||
vim.tbl_extend("force", { desc = "Toggle Diagnostic List" }, opts))
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
require("gitsigns").setup({
|
|
||||||
current_line_blame = true,
|
|
||||||
current_line_blame_opts = { delay = 0 },
|
|
||||||
on_attach = function(bufnr)
|
|
||||||
local gitsigns = require("gitsigns")
|
|
||||||
|
|
||||||
local function map(mode, l, r, opts)
|
|
||||||
opts = opts or {}
|
|
||||||
opts.buffer = bufnr
|
|
||||||
vim.keymap.set(mode, l, r, opts)
|
|
||||||
end
|
|
||||||
|
|
||||||
map("n", "<leader>gb", gitsigns.toggle_current_line_blame, { desc = "Git Blame Line" })
|
|
||||||
map("n", "<leader>gB", function()
|
|
||||||
gitsigns.blame_line({ full = true })
|
|
||||||
end, { desc = "Git Blame Full" })
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
local function get_git_info()
|
|
||||||
local abs_path = vim.fn.expand("%:p")
|
|
||||||
local git_root = vim.fn.systemlist(
|
|
||||||
"git -C " .. vim.fn.escape(vim.fn.fnamemodify(abs_path, ":h"), " ") .. " rev-parse --show-toplevel"
|
|
||||||
)[1]
|
|
||||||
|
|
||||||
if vim.v.shell_error ~= 0 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local git_repo = vim.fn.system("git remote get-url origin"):match("([^/:]+/[^/.]+)%.?[^/]*$"):gsub("\n", "")
|
|
||||||
local git_branch = vim.fn.system("git rev-parse --abbrev-ref HEAD"):gsub("\n", "")
|
|
||||||
|
|
||||||
return {
|
|
||||||
file = vim.fn.fnamemodify(abs_path, ":s?" .. git_root .. "/??"),
|
|
||||||
branch = git_branch,
|
|
||||||
repo = git_repo,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local function copy_git_link()
|
|
||||||
local git_info = get_git_info()
|
|
||||||
if git_info == nil then
|
|
||||||
vim.notify("Failed to get git info", vim.log.levels.ERROR)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local start_line = vim.fn.line("v")
|
|
||||||
local end_line = vim.fn.line(".")
|
|
||||||
|
|
||||||
local message = string.format(
|
|
||||||
"https://github.com/%s/blob/%s/%s#L%d-L%d",
|
|
||||||
git_info.repo,
|
|
||||||
git_info.branch,
|
|
||||||
git_info.file,
|
|
||||||
start_line,
|
|
||||||
end_line
|
|
||||||
)
|
|
||||||
vim.fn.setreg("+", message)
|
|
||||||
vim.notify("Copied:\n\t" .. message, vim.log.levels.INFO)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Create KeyMaps
|
|
||||||
vim.keymap.set("v", "<Leader>gy", function() copy_git_link() end, { desc = "Copy GitHub Link" })
|
|
||||||
vim.keymap.set('n', '<leader>go', '<cmd>DiffviewOpen<CR>', { desc = "Open Diff - Current" })
|
|
||||||
vim.keymap.set('n', '<leader>gO', '<cmd>DiffviewOpen origin/main...HEAD<CR>', { desc = "Open Diff - Main" })
|
|
||||||
vim.keymap.set('n', '<leader>gh', '<cmd>DiffviewFileHistory<CR>', { desc = "Diff History" })
|
|
||||||
vim.keymap.set('n', '<leader>gH', '<cmd>DiffviewFileHistory --range=origin..HEAD<CR>', { desc = "Diff History - Main" })
|
|
||||||
vim.keymap.set('n', '<leader>gc', '<cmd>DiffviewClose<CR>', { desc = "Close Diff" })
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
local llm_endpoint = "https://llm-api.va.reichard.io"
|
|
||||||
local llm_assistant_model = "qwen3-coder-30b-instruct"
|
|
||||||
local llm_infill_model = "qwen3-coder-30b-instruct"
|
|
||||||
|
|
||||||
-- local llm_assistant_model = "devstral-small-2-instruct"
|
|
||||||
-- local llm_infill_model = "qwen2.5-coder-3b-instruct"
|
|
||||||
|
|
||||||
|
|
||||||
local current_fim = "copilot" -- change this to switch default
|
|
||||||
|
|
||||||
-- Copilot Configuration
|
|
||||||
vim.g.copilot_no_tab_map = true
|
|
||||||
vim.g.copilot_filetypes = { ["*"] = true }
|
|
||||||
|
|
||||||
-- LLama LLM FIM
|
|
||||||
vim.g.llama_config = {
|
|
||||||
endpoint = llm_endpoint .. "/infill",
|
|
||||||
model = llm_infill_model,
|
|
||||||
n_predict = 2048,
|
|
||||||
ring_n_chunks = 32,
|
|
||||||
enable_at_startup = (current_fim == "llama"), -- enable based on default
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Toggle function for manual switching
|
|
||||||
local function switch_llm_fim_provider(switch_to)
|
|
||||||
if switch_to == "llama" then
|
|
||||||
vim.cmd("Copilot disable")
|
|
||||||
vim.cmd("LlamaEnable")
|
|
||||||
current_fim = "llama"
|
|
||||||
vim.notify("Llama FIM enabled", vim.log.levels.INFO)
|
|
||||||
else
|
|
||||||
vim.cmd("Copilot enable")
|
|
||||||
vim.cmd("LlamaDisable")
|
|
||||||
current_fim = "copilot"
|
|
||||||
vim.notify("Copilot FIM enabled", vim.log.levels.INFO)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Configure Code Companion
|
|
||||||
require("plugins.codecompanion.fidget-spinner"):init()
|
|
||||||
local codecompanion = require("codecompanion")
|
|
||||||
codecompanion.setup({
|
|
||||||
display = {
|
|
||||||
chat = {
|
|
||||||
show_token_count = true,
|
|
||||||
window = {
|
|
||||||
layout = "float",
|
|
||||||
width = 0.6,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
adapters = {
|
|
||||||
http = {
|
|
||||||
opts = { show_defaults = false, },
|
|
||||||
copilot = "copilot",
|
|
||||||
llamaswap = function()
|
|
||||||
return require("codecompanion.adapters").extend("openai_compatible", {
|
|
||||||
formatted_name = "LlamaSwap",
|
|
||||||
name = "llamaswap",
|
|
||||||
schema = { model = { default = llm_assistant_model } },
|
|
||||||
env = { url = llm_endpoint },
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
acp = {
|
|
||||||
opts = { show_defaults = false },
|
|
||||||
opencode = "opencode",
|
|
||||||
}
|
|
||||||
},
|
|
||||||
strategies = {
|
|
||||||
chat = { adapter = "opencode" },
|
|
||||||
inline = { adapter = "llamaswap" },
|
|
||||||
cmd = { adapter = "llamaswap" },
|
|
||||||
},
|
|
||||||
chat = { dispay = "telescope" },
|
|
||||||
memory = { opts = { chat = { enabled = true } } },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Create KeyMaps for Code Companion
|
|
||||||
vim.keymap.set("n", "<leader>aa", codecompanion.actions, { desc = "Actions" })
|
|
||||||
vim.keymap.set("n", "<leader>af", function()
|
|
||||||
if current_fim == "llama" then
|
|
||||||
switch_llm_fim_provider("copilot")
|
|
||||||
else
|
|
||||||
switch_llm_fim_provider("llama")
|
|
||||||
end
|
|
||||||
end, { desc = "Toggle FIM (Llama / Copilot)" })
|
|
||||||
vim.keymap.set("n", "<leader>ao", function() require("snacks.terminal").toggle("opencode") end,
|
|
||||||
{ desc = "Toggle OpenCode" })
|
|
||||||
vim.keymap.set("v", "<leader>ai", ":CodeCompanion<cr>", { desc = "Inline Prompt" })
|
|
||||||
vim.keymap.set({ "n", "v" }, "<leader>an", codecompanion.chat, { desc = "New Chat" })
|
|
||||||
vim.keymap.set({ "n", "t" }, "<leader>at", codecompanion.toggle, { desc = "Toggle Chat" })
|
|
||||||
vim.keymap.set('i', '<C-J>', 'copilot#Accept("\\<CR>")', {
|
|
||||||
expr = true,
|
|
||||||
replace_keycodes = false
|
|
||||||
})
|
|
||||||
@@ -1,246 +0,0 @@
|
|||||||
------------------------------------------------------
|
|
||||||
------------------- Custom Settings ------------------
|
|
||||||
------------------------------------------------------
|
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
|
||||||
pattern = "go",
|
|
||||||
callback = function()
|
|
||||||
vim.bo.textwidth = 120
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
require('render-markdown').setup({
|
|
||||||
completions = { lsp = { enabled = true } },
|
|
||||||
file_types = { 'markdown', 'codecompanion' },
|
|
||||||
html = {
|
|
||||||
-- CodeCompanion Markdown Tweaks
|
|
||||||
tag = {
|
|
||||||
file = { icon = ' ', highlight = 'Normal' },
|
|
||||||
buf = { icon = ' ', highlight = 'Normal' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
------------------------------------------------------
|
|
||||||
---------------------- LSP Lines ---------------------
|
|
||||||
------------------------------------------------------
|
|
||||||
require("lsp_lines").setup()
|
|
||||||
vim.diagnostic.config({
|
|
||||||
virtual_text = false,
|
|
||||||
virtual_lines = true,
|
|
||||||
})
|
|
||||||
|
|
||||||
------------------------------------------------------
|
|
||||||
-------------------- Built-in LSP --------------------
|
|
||||||
------------------------------------------------------
|
|
||||||
local nix_vars = require("nix-vars")
|
|
||||||
|
|
||||||
local augroup = vim.api.nvim_create_augroup("LspFormatting", { clear = false })
|
|
||||||
local on_attach = function(client, bufnr)
|
|
||||||
if client:supports_method("textDocument/formatting") then
|
|
||||||
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
|
|
||||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
|
||||||
group = augroup,
|
|
||||||
buffer = bufnr,
|
|
||||||
callback = function()
|
|
||||||
vim.lsp.buf.format({ async = false, timeout_ms = 2000 })
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Create KeyMaps
|
|
||||||
local bufopts = { noremap = true, silent = true, buffer = bufnr }
|
|
||||||
vim.keymap.set("n", "K", vim.lsp.buf.hover, vim.tbl_extend("force", { desc = 'Hover documentation' }, bufopts))
|
|
||||||
vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help,
|
|
||||||
vim.tbl_extend("force", { desc = "Show signature help" }, bufopts))
|
|
||||||
vim.keymap.set("n", "<leader>lD", vim.lsp.buf.declaration,
|
|
||||||
vim.tbl_extend("force", { desc = "Go to declaration" }, bufopts))
|
|
||||||
vim.keymap.set("n", "<leader>ld", vim.lsp.buf.definition,
|
|
||||||
vim.tbl_extend("force", { desc = "Go to definition" }, bufopts))
|
|
||||||
vim.keymap.set("n", "<leader>li", vim.lsp.buf.implementation,
|
|
||||||
vim.tbl_extend("force", { desc = "Go to implementation" }, bufopts))
|
|
||||||
vim.keymap.set("n", "<leader>ln", vim.lsp.buf.rename, vim.tbl_extend("force", { desc = "Rename symbol" }, bufopts))
|
|
||||||
vim.keymap.set("n", "<leader>lr", vim.lsp.buf.references,
|
|
||||||
vim.tbl_extend("force", { desc = "Show references" }, bufopts))
|
|
||||||
vim.keymap.set("n", "<leader>lt", vim.lsp.buf.type_definition,
|
|
||||||
vim.tbl_extend("force", { desc = "Go to type definition" }, bufopts))
|
|
||||||
vim.keymap.set("n", "<leader>lf", function()
|
|
||||||
vim.lsp.buf.format({ async = true, timeout_ms = 2000 })
|
|
||||||
end, vim.tbl_extend("force", { desc = "Format file" }, bufopts))
|
|
||||||
end
|
|
||||||
|
|
||||||
local on_attach_no_formatting = function(client, bufnr)
|
|
||||||
-- Disable Formatting
|
|
||||||
client.server_capabilities.documentFormattingProvider = false
|
|
||||||
client.server_capabilities.documentRangeFormattingProvider = false
|
|
||||||
on_attach(client, bufnr)
|
|
||||||
end
|
|
||||||
|
|
||||||
local organize_go_imports = function()
|
|
||||||
local encoding = vim.lsp.util._get_offset_encoding()
|
|
||||||
local params = vim.lsp.util.make_range_params(nil, encoding)
|
|
||||||
params.context = { only = { "source.organizeImports" } }
|
|
||||||
|
|
||||||
local result = vim.lsp.buf_request_sync(0, "textDocument/codeAction", params, 3000)
|
|
||||||
for _, res in pairs(result or {}) do
|
|
||||||
for _, r in pairs(res.result or {}) do
|
|
||||||
if r.edit then
|
|
||||||
vim.lsp.util.apply_workspace_edit(r.edit, encoding)
|
|
||||||
else
|
|
||||||
vim.lsp.buf.execute_command(r.command)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local default_config = {
|
|
||||||
flags = { debounce_text_changes = 150 },
|
|
||||||
capabilities = require("cmp_nvim_lsp").default_capabilities(),
|
|
||||||
on_attach = on_attach,
|
|
||||||
}
|
|
||||||
local setup_lsp = function(name, config)
|
|
||||||
local final_config = vim.tbl_deep_extend("force", default_config, config or {})
|
|
||||||
|
|
||||||
vim.lsp.config(name, final_config)
|
|
||||||
vim.lsp.enable(name)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Python LSP Configuration
|
|
||||||
setup_lsp("pyright", {
|
|
||||||
filetypes = { "starlark", "python" },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- HTML LSP Configuration
|
|
||||||
setup_lsp("html", {
|
|
||||||
on_attach = on_attach_no_formatting,
|
|
||||||
cmd = { nix_vars.vscls .. "/bin/vscode-html-language-server", "--stdio" },
|
|
||||||
filetypes = { "htm", "html" },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- JSON LSP Configuration
|
|
||||||
setup_lsp("jsonls", {
|
|
||||||
on_attach = on_attach_no_formatting,
|
|
||||||
cmd = { nix_vars.vscls .. "/bin/vscode-html-language-server", "--stdio" },
|
|
||||||
filetypes = { "json", "jsonc", "jsonl" },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- CSS LSP Configuration
|
|
||||||
setup_lsp("cssls", {
|
|
||||||
on_attach = on_attach_no_formatting,
|
|
||||||
cmd = { nix_vars.vscls .. "/bin/vscode-html-language-server", "--stdio" },
|
|
||||||
filetypes = { "css" },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Typescript / Javascript LSP Configuration
|
|
||||||
setup_lsp("ts_ls", {
|
|
||||||
on_attach = on_attach_no_formatting,
|
|
||||||
cmd = { nix_vars.tsls, "--stdio" },
|
|
||||||
filetypes = { "typescript", "typescriptreact", "javascript" },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- ESLint LSP
|
|
||||||
setup_lsp("eslint", {
|
|
||||||
on_attach = on_attach_no_formatting,
|
|
||||||
cmd = { nix_vars.vscls .. "/bin/vscode-eslint-language-server", "--stdio" },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- C LSP Configuration
|
|
||||||
setup_lsp("clangd", {
|
|
||||||
cmd = { nix_vars.clangd },
|
|
||||||
filetypes = { "c", "cpp", "objc", "objcpp", "cuda" },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Lua LSP Configuration
|
|
||||||
setup_lsp("lua_ls", {
|
|
||||||
cmd = { nix_vars.luals },
|
|
||||||
filetypes = { "lua" },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Lua LSP Configuration
|
|
||||||
setup_lsp("sqls", {
|
|
||||||
cmd = { nix_vars.sqls },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Nix LSP Configuration
|
|
||||||
setup_lsp("nil_ls", {
|
|
||||||
filetypes = { "nix" },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Omnisharp LSP Configuration
|
|
||||||
-- NOTE: https://github.com/NixOS/nixpkgs/issues/479348
|
|
||||||
-- setup_lsp("omnisharp", {
|
|
||||||
-- enable_roslyn_analyzers = true,
|
|
||||||
-- enable_import_completion = true,
|
|
||||||
-- organize_imports_on_format = true,
|
|
||||||
-- enable_decompilation_support = true,
|
|
||||||
-- filetypes = { "cs", "vb", "csproj", "sln", "slnx", "props", "csx", "targets", "tproj", "slngen", "fproj" },
|
|
||||||
-- cmd = { nix_vars.omnisharp, "--languageserver", "--hostPID", tostring(vim.fn.getpid()) },
|
|
||||||
-- })
|
|
||||||
|
|
||||||
-- Go LSP Configuration
|
|
||||||
setup_lsp("gopls", {
|
|
||||||
on_attach = function(client, bufnr)
|
|
||||||
on_attach(client, bufnr)
|
|
||||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
|
||||||
group = augroup,
|
|
||||||
buffer = bufnr,
|
|
||||||
callback = organize_go_imports,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
cmd = { nix_vars.gopls },
|
|
||||||
filetypes = { "go" },
|
|
||||||
settings = {
|
|
||||||
gopls = {
|
|
||||||
buildFlags = { "-tags=e2e" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Go LSP Linting
|
|
||||||
setup_lsp("golangci_lint_ls", {
|
|
||||||
on_attach = on_attach_no_formatting,
|
|
||||||
cmd = { nix_vars.golintls },
|
|
||||||
filetypes = { "go" },
|
|
||||||
init_options = {
|
|
||||||
command = {
|
|
||||||
"golangci-lint",
|
|
||||||
"run",
|
|
||||||
"--output.json.path",
|
|
||||||
"stdout",
|
|
||||||
"--show-stats=false",
|
|
||||||
"--issues-exit-code=1",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
------------------------------------------------------
|
|
||||||
--------------------- None-LS LSP --------------------
|
|
||||||
------------------------------------------------------
|
|
||||||
local none_ls = require("null-ls")
|
|
||||||
|
|
||||||
none_ls.setup({
|
|
||||||
sources = {
|
|
||||||
-- Formatting
|
|
||||||
none_ls.builtins.formatting.prettier,
|
|
||||||
none_ls.builtins.formatting.prettier.with({ filetypes = { "template" } }),
|
|
||||||
none_ls.builtins.formatting.nixpkgs_fmt, -- TODO: nixd native LSP?
|
|
||||||
require("none-ls.formatting.autopep8").with({
|
|
||||||
filetypes = { "starlark", "python" },
|
|
||||||
extra_args = { "--max-line-length", "100" },
|
|
||||||
}),
|
|
||||||
|
|
||||||
-- Completion
|
|
||||||
none_ls.builtins.completion.spell,
|
|
||||||
},
|
|
||||||
on_attach = function(client, bufnr)
|
|
||||||
if client:supports_method("textDocument/formatting") then
|
|
||||||
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
|
|
||||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
|
||||||
group = augroup,
|
|
||||||
buffer = bufnr,
|
|
||||||
callback = function()
|
|
||||||
vim.lsp.buf.format({ async = false, timeout_ms = 2000 })
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
-- Cached variable
|
|
||||||
local cached_pr_status = ""
|
|
||||||
|
|
||||||
-- Read process output
|
|
||||||
local function read_output(err, data)
|
|
||||||
if err then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if not data then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
cached_pr_status = data
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Spawn process
|
|
||||||
local function execute_command()
|
|
||||||
local stdout = vim.loop.new_pipe(false)
|
|
||||||
|
|
||||||
local spawn_opts = {
|
|
||||||
detached = true,
|
|
||||||
stdio = { nil, stdout, nil },
|
|
||||||
args = { "-c", "gh pr checks | awk -F'\t' '{ print $2 }'" },
|
|
||||||
}
|
|
||||||
|
|
||||||
vim.loop.spawn("bash", spawn_opts, function()
|
|
||||||
stdout:read_start(read_output)
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Spawn & schedule process
|
|
||||||
execute_command()
|
|
||||||
vim.fn.timer_start(300000, execute_command)
|
|
||||||
|
|
||||||
-- Return status from cache
|
|
||||||
local function pr_status()
|
|
||||||
--
|
|
||||||
--
|
|
||||||
--
|
|
||||||
-- PENDING COLOR - #d29922
|
|
||||||
-- PASS COLOR - #3fb950
|
|
||||||
-- FAIL COLOR - #f85149
|
|
||||||
return cached_pr_status
|
|
||||||
:gsub("\n", "")
|
|
||||||
:gsub("fail", " ")
|
|
||||||
:gsub("pass", " ")
|
|
||||||
:gsub("pending", " ")
|
|
||||||
:gsub("skipping", " ")
|
|
||||||
:sub(1, -2)
|
|
||||||
end
|
|
||||||
|
|
||||||
require("lualine").setup({
|
|
||||||
options = { theme = "catppuccin" },
|
|
||||||
sections = {
|
|
||||||
lualine_c = { { pr_status } },
|
|
||||||
-- lualine_z = { require("opencode").statusline }
|
|
||||||
},
|
|
||||||
})
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
-- Noice Setup
|
|
||||||
require("noice").setup({
|
|
||||||
-- Ignore (Snacks Priority)
|
|
||||||
routes = {
|
|
||||||
{
|
|
||||||
filter = { event = "ui", kind = "input", },
|
|
||||||
opts = { skip = true },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
filter = { event = "ui", kind = "select", },
|
|
||||||
opts = { skip = true },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
require("octo").setup()
|
|
||||||
|
|
||||||
-- Create KeyMaps
|
|
||||||
vim.keymap.set("n", "<leader>rs", "<cmd>Octo review start<cr>")
|
|
||||||
vim.keymap.set("n", "<leader>rd", "<cmd>Octo review discard<cr>")
|
|
||||||
vim.keymap.set("n", "<leader>rr", "<cmd>Octo review resume<cr>")
|
|
||||||
vim.keymap.set("n", "<leader>re", "<cmd>Octo review submit<cr>")
|
|
||||||
vim.keymap.set("n", "<leader>rca", "<cmd>Octo review comments<cr>")
|
|
||||||
vim.keymap.set("n", "<leader>rcs", "<cmd>Octo comment suggest<cr>")
|
|
||||||
vim.keymap.set("n", "<leader>rcc", "<cmd>Octo comment add<cr>")
|
|
||||||
vim.keymap.set("n", "<leader>rcr", "<cmd>Octo comment reply<cr>")
|
|
||||||
vim.keymap.set("n", "<leader>pd", "<cmd>Octo pr diff<cr>")
|
|
||||||
vim.keymap.set("n", "<leader>pc", "<cmd>Octo pr changes<cr>")
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
local progress = require("fidget.progress")
|
|
||||||
|
|
||||||
local M = {}
|
|
||||||
|
|
||||||
function M:init()
|
|
||||||
local group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", {})
|
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd({ "User" }, {
|
|
||||||
pattern = "CodeCompanionRequestStarted",
|
|
||||||
group = group,
|
|
||||||
callback = function(request)
|
|
||||||
local handle = M:create_progress_handle(request)
|
|
||||||
M:store_progress_handle(request.data.id, handle)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd({ "User" }, {
|
|
||||||
pattern = "CodeCompanionRequestFinished",
|
|
||||||
group = group,
|
|
||||||
callback = function(request)
|
|
||||||
local handle = M:pop_progress_handle(request.data.id)
|
|
||||||
if handle then
|
|
||||||
M:report_exit_status(handle, request)
|
|
||||||
handle:finish()
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
M.handles = {}
|
|
||||||
|
|
||||||
function M:store_progress_handle(id, handle)
|
|
||||||
M.handles[id] = handle
|
|
||||||
end
|
|
||||||
|
|
||||||
function M:pop_progress_handle(id)
|
|
||||||
local handle = M.handles[id]
|
|
||||||
M.handles[id] = nil
|
|
||||||
return handle
|
|
||||||
end
|
|
||||||
|
|
||||||
function M:create_progress_handle(request)
|
|
||||||
return progress.handle.create({
|
|
||||||
title = " Requesting assistance (" .. request.data.adapter.formatted_name .. ")",
|
|
||||||
message = "In progress...",
|
|
||||||
lsp_client = {
|
|
||||||
name = M:llm_role_title(request.data.adapter),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
function M:llm_role_title(adapter)
|
|
||||||
local parts = {}
|
|
||||||
table.insert(parts, adapter.formatted_name)
|
|
||||||
if adapter.model and adapter.model ~= "" then
|
|
||||||
table.insert(parts, "(" .. adapter.model .. ")")
|
|
||||||
end
|
|
||||||
return table.concat(parts, " ")
|
|
||||||
end
|
|
||||||
|
|
||||||
function M:report_exit_status(handle, request)
|
|
||||||
if request.data.status == "success" then
|
|
||||||
handle.message = "Completed"
|
|
||||||
elseif request.data.status == "error" then
|
|
||||||
handle.message = " Error"
|
|
||||||
else
|
|
||||||
handle.message = " Cancelled"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
-- Snacks Setup
|
|
||||||
local snacks = require("snacks")
|
|
||||||
snacks.setup({
|
|
||||||
input = { enabled = true, style = "popup" },
|
|
||||||
select = { enabled = true, style = "popup" },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Create KeyMaps
|
|
||||||
vim.keymap.set("n", "<leader>fb", snacks.picker.buffers, { desc = "Buffers" })
|
|
||||||
vim.keymap.set("n", "<leader>fd", snacks.picker.diagnostics, { desc = "Diagnostics" })
|
|
||||||
vim.keymap.set("n", "<leader>ff", snacks.picker.files, { desc = "Find Files" })
|
|
||||||
vim.keymap.set("n", "<leader>fg", snacks.picker.grep, { desc = "Grep Files" })
|
|
||||||
vim.keymap.set("n", "<leader>fh", snacks.picker.help, { desc = "Help Tags" })
|
|
||||||
vim.keymap.set("n", "<leader>fj", snacks.picker.jumps, { desc = "Jump List" })
|
|
||||||
vim.keymap.set("n", "<leader>fl", function() snacks.terminal("lazygit") end, { desc = "LazyGit" })
|
|
||||||
vim.keymap.set("n", "<leader>fp", snacks.picker.gh_pr, { desc = "GitHub Pull Requests" })
|
|
||||||
vim.keymap.set("n", "<leader>fs", snacks.picker.lsp_symbols, { desc = "Symbols" })
|
|
||||||
vim.keymap.set("n", "<leader>fu", snacks.picker.undo, { desc = "Undo History" })
|
|
||||||
vim.keymap.set("n", "gI", snacks.picker.lsp_implementations, { desc = "LSP Implementations" })
|
|
||||||
vim.keymap.set("n", "gi", snacks.picker.lsp_incoming_calls, { desc = "LSP Incoming Calls" })
|
|
||||||
vim.keymap.set("n", "go", snacks.picker.lsp_outgoing_calls, { desc = "LSP Outgoing Calls" })
|
|
||||||
vim.keymap.set("n", "gr", snacks.picker.lsp_references, { desc = "LSP References" })
|
|
||||||
vim.keymap.set("n", [[<c-\>]], function() snacks.terminal() end, { desc = "Toggle Terminal" })
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
-- require("toggleterm").setup({open_mapping = [[<c-\>]]})
|
|
||||||
--
|
|
||||||
-- -- Get PR status on terminal load
|
|
||||||
-- -- require("toggleterm").setup({
|
|
||||||
-- -- open_mapping = [[<c-\>]],
|
|
||||||
-- -- on_create = function(term)
|
|
||||||
-- -- vim.cmd("startinsert")
|
|
||||||
-- -- term:send("gh pr checks")
|
|
||||||
-- -- end
|
|
||||||
-- -- })
|
|
||||||
--
|
|
||||||
-- -- Duplicate C-w & Esc Behavior
|
|
||||||
-- function _G.set_terminal_keymaps()
|
|
||||||
-- local opts = {buffer = 0}
|
|
||||||
-- vim.opt.signcolumn = "no"
|
|
||||||
-- vim.keymap.set('t', '<esc>', [[<C-\><C-n>]], opts)
|
|
||||||
-- vim.keymap.set('t', '<C-w>', [[<C-\><C-n><C-w>]], opts)
|
|
||||||
-- end
|
|
||||||
--
|
|
||||||
-- vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()')
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
require("nvim-treesitter.configs").setup({
|
|
||||||
highlight = { enable = true, additional_vim_regex_highlighting = false },
|
|
||||||
})
|
|
||||||
vim.treesitter.language.register("markdown", "octo")
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user