Compare commits
16 Commits
update
...
dravidians
| Author | SHA1 | Date | |
|---|---|---|---|
| cd3b271e10 | |||
| 3eb0a098a2 | |||
| 77d8803a8f | |||
| ba5b618e49 | |||
| 7580edb82c | |||
| 88abb49340 | |||
| 9c536f87f6 | |||
| 88915d9cfd | |||
| 94e24f9277 | |||
| 51c852b5ef | |||
| 54fc3e317b | |||
| 81b9cbde44 | |||
| 60f93e604f | |||
| ced70ee3e3 | |||
| 5ba12d3684 | |||
| 231b6bdb28 |
Generated
+19
-37
@@ -23,11 +23,11 @@
|
||||
},
|
||||
"agent-skills": {
|
||||
"locked": {
|
||||
"lastModified": 1787148831,
|
||||
"narHash": "sha256-OGVxFCa4nkWJwieNVD0qxKedf22Bi2snCTXhsFv2m5s=",
|
||||
"lastModified": 1787174393,
|
||||
"narHash": "sha256-nMxPQbVaK9cdsidGP78VOxUKTAHRKHGQEzkRbKxuivY=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "6f057568704059bed1d25f21fcc35021df9611b1",
|
||||
"revCount": 52,
|
||||
"rev": "465b20a7c64c84c645acbd94548c36c36decbfe4",
|
||||
"revCount": 66,
|
||||
"type": "git",
|
||||
"url": "https://git.naps.pt/yolo/agent-skills.git"
|
||||
},
|
||||
@@ -71,15 +71,15 @@
|
||||
},
|
||||
"claude-code": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785285785,
|
||||
"narHash": "sha256-r1cMlvXjRVKe+uQ/GKwy4TpionpmbNgksFP2758D/MM=",
|
||||
"lastModified": 1787087042,
|
||||
"narHash": "sha256-xt4hV5if4WpNCfwtT0RW3oze/bJ534LUR0KLOw2cbNE=",
|
||||
"owner": "sadjow",
|
||||
"repo": "claude-code-nix",
|
||||
"rev": "da78262708d858861afbe1f68ea65fedda4054c4",
|
||||
"rev": "3d6821aaa0a0a06cc4b60dcd00d05756de68ba50",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -90,7 +90,7 @@
|
||||
},
|
||||
"codex-cli": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_2",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
@@ -112,7 +112,7 @@
|
||||
},
|
||||
"codex-desktop-linux": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_3",
|
||||
"flake-utils": "flake-utils_2",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
@@ -221,7 +221,7 @@
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
@@ -238,24 +238,6 @@
|
||||
}
|
||||
},
|
||||
"flake-utils_2": {
|
||||
"inputs": {
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_3": {
|
||||
"inputs": {
|
||||
"systems": "systems_3"
|
||||
},
|
||||
@@ -273,7 +255,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_4": {
|
||||
"flake-utils_3": {
|
||||
"locked": {
|
||||
"lastModified": 1644229661,
|
||||
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
|
||||
@@ -288,7 +270,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_5": {
|
||||
"flake-utils_4": {
|
||||
"inputs": {
|
||||
"systems": "systems_8"
|
||||
},
|
||||
@@ -308,7 +290,7 @@
|
||||
},
|
||||
"foundry": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_4",
|
||||
"flake-utils": "flake-utils_3",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
@@ -800,11 +782,11 @@
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1784783405,
|
||||
"narHash": "sha256-4IHyyLgLBdKefkljdKod4IMn023pQiDXAWJA187cmdY=",
|
||||
"lastModified": 1787052956,
|
||||
"narHash": "sha256-fZt7Au28AduGpt7vRfIOcpsHKJ+9cEnuQ2NdWuh0KVc=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "7525d999cd850b9a488817abc89c75dc733acf17",
|
||||
"rev": "b47ad65d73ab65ded9ab408fe558866d71defee8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1055,7 +1037,7 @@
|
||||
"sem": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts_2",
|
||||
"flake-utils": "flake-utils_5",
|
||||
"flake-utils": "flake-utils_4",
|
||||
"nixpkgs": "nixpkgs_7",
|
||||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
imports = [
|
||||
../common/programs/default.nix
|
||||
../common/programs/desktop
|
||||
../common/programs/workstation-apps.nix
|
||||
../common/programs/editors.nix
|
||||
../common/programs/dev-workstation.nix
|
||||
../common/programs/ai-gui.nix
|
||||
../common/programs/zen-browser.nix
|
||||
../common/programs/hyprland
|
||||
../common/programs/kitty
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
claude-desktop = pkgs.callPackage ../../../pkgs/claude-desktop/package.nix {
|
||||
inherit (config.custom.aiApps) deviceScaleFactor;
|
||||
};
|
||||
codex-cli = inputs.codex-cli.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
||||
t3-code = pkgs.callPackage ../../../pkgs/t3-code/package.nix {
|
||||
inherit (config.custom.aiApps) deviceScaleFactor;
|
||||
};
|
||||
in
|
||||
{
|
||||
imports = [ inputs.codex-desktop-linux.homeManagerModules.default ];
|
||||
|
||||
home.packages = lib.optionals pkgs.stdenv.hostPlatform.isx86_64 [
|
||||
claude-desktop
|
||||
t3-code
|
||||
];
|
||||
|
||||
programs.codexDesktopLinux = {
|
||||
enable = true;
|
||||
cliPackage = codex-cli;
|
||||
};
|
||||
}
|
||||
@@ -1,16 +1,9 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
# Official Anthropic Claude desktop app (Linux build, x86_64 only).
|
||||
claude-desktop = pkgs.callPackage ../../../../pkgs/claude-desktop/package.nix {
|
||||
inherit (config.custom.aiApps) deviceScaleFactor;
|
||||
};
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
inputs.agent-skills.homeModules.default
|
||||
@@ -27,23 +20,20 @@ in
|
||||
};
|
||||
|
||||
config.home = {
|
||||
packages =
|
||||
with pkgs;
|
||||
[
|
||||
inputs.claude-code.packages.${pkgs.stdenv.hostPlatform.system}.default
|
||||
packages = with pkgs; [
|
||||
inputs.claude-code.packages.${pkgs.stdenv.hostPlatform.system}.default
|
||||
|
||||
# sandbox
|
||||
bubblewrap
|
||||
socat
|
||||
libseccomp
|
||||
# sandbox
|
||||
bubblewrap
|
||||
socat
|
||||
libseccomp
|
||||
|
||||
# voice
|
||||
sox
|
||||
# voice
|
||||
sox
|
||||
|
||||
# beads
|
||||
dolt
|
||||
]
|
||||
++ lib.optional pkgs.stdenv.hostPlatform.isx86_64 claude-desktop;
|
||||
# beads
|
||||
dolt
|
||||
];
|
||||
|
||||
file = {
|
||||
".default-npm-packages".text = ''
|
||||
@@ -51,11 +41,6 @@ in
|
||||
@beads/bd
|
||||
'';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
".claude/statusline.sh" = {
|
||||
source = ./statusline.sh;
|
||||
executable = true;
|
||||
|
||||
@@ -7,14 +7,5 @@ let
|
||||
codex-cli = inputs.codex-cli.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
||||
in
|
||||
{
|
||||
imports = [ inputs.codex-desktop-linux.homeManagerModules.default ];
|
||||
|
||||
# cliPackage only tells the desktop app where to find codex; it does not put
|
||||
# it on PATH, so the cli needs installing separately.
|
||||
home.packages = [ codex-cli ];
|
||||
|
||||
programs.codexDesktopLinux = {
|
||||
enable = true;
|
||||
cliPackage = codex-cli;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
@@ -10,7 +9,6 @@
|
||||
./zsh.nix
|
||||
./nix.nix
|
||||
./neovim
|
||||
./editors.nix
|
||||
./rust.nix
|
||||
./elixir.nix
|
||||
./nodejs.nix
|
||||
@@ -34,10 +32,6 @@
|
||||
# this with a plain assignment.
|
||||
mutableFilesRepoPath = lib.mkDefault "${config.home.homeDirectory}/projects/nixos-config";
|
||||
|
||||
packages = with pkgs; [
|
||||
impala
|
||||
];
|
||||
|
||||
username = lib.mkDefault "naps62";
|
||||
homeDirectory = lib.mkDefault "/home/${config.home.username}";
|
||||
stateVersion = lib.mkDefault "24.05";
|
||||
|
||||
@@ -4,53 +4,29 @@
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
./darkman.nix
|
||||
./spicetify.nix
|
||||
];
|
||||
imports = [ ./darkman.nix ];
|
||||
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
# various
|
||||
google-chrome
|
||||
thunar
|
||||
obsidian
|
||||
mpv
|
||||
# screen recording — evaluating these
|
||||
obs-studio
|
||||
kooha # simple Wayland-native screen+audio recorder
|
||||
vokoscreen-ng # GUI recorder with webcam overlay
|
||||
gimp
|
||||
font-manager
|
||||
imv
|
||||
pavucontrol
|
||||
zathura
|
||||
libsForQt5.qt5ct
|
||||
kdePackages.qt6ct
|
||||
nwg-look
|
||||
xournalpp
|
||||
jq
|
||||
ffmpeg
|
||||
unzip
|
||||
|
||||
# remote desktop
|
||||
remmina
|
||||
|
||||
# networking
|
||||
networkmanagerapplet
|
||||
mtr
|
||||
dnsutils
|
||||
|
||||
# communication
|
||||
slack
|
||||
ferdium
|
||||
signal-desktop
|
||||
zoom-us
|
||||
|
||||
# dev tools
|
||||
yaak
|
||||
bun
|
||||
|
||||
# themes
|
||||
tela-icon-theme
|
||||
];
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
doctl
|
||||
awscli2
|
||||
terraform
|
||||
bruno
|
||||
coturn
|
||||
usbutils
|
||||
ktlint
|
||||
];
|
||||
}
|
||||
@@ -7,7 +7,6 @@
|
||||
./codex.nix
|
||||
./pi.nix
|
||||
./ralph-claude-code.nix
|
||||
./t3-code.nix
|
||||
];
|
||||
|
||||
programs = {
|
||||
@@ -26,19 +25,12 @@
|
||||
|
||||
home.packages = with pkgs; [
|
||||
imagemagick
|
||||
doctl
|
||||
awscli2
|
||||
terraform
|
||||
inotify-tools
|
||||
devenv
|
||||
bruno
|
||||
sshfs
|
||||
coturn
|
||||
file
|
||||
usbutils
|
||||
nmap
|
||||
lsof
|
||||
ktlint
|
||||
croc
|
||||
opencode
|
||||
process-compose
|
||||
|
||||
@@ -19,6 +19,9 @@ tmp/**/*
|
||||
*.log
|
||||
*.tmp
|
||||
|
||||
# Local git worktree checkouts
|
||||
worktrees/
|
||||
|
||||
# Latex
|
||||
_inputs.tex
|
||||
_sections.tex
|
||||
|
||||
@@ -10,6 +10,8 @@ let
|
||||
|
||||
hyprPkgs = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system};
|
||||
|
||||
osd = "${pkgs.swayosd}/bin/swayosd-client";
|
||||
|
||||
# xdph runs this instead of hyprland-share-picker (screencopy:custom_picker_binary).
|
||||
# The contract is just "print [SELECTION] to stdout"; a leading "r" grants a
|
||||
# restore token. Printing it immediately means the dialog never renders.
|
||||
@@ -365,18 +367,21 @@ in
|
||||
hl.dispatch(hl.dsp.window.center())
|
||||
end)
|
||||
|
||||
-- volume / brightness (locked so they work on the lock screen; repeat on hold)
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl set 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl set 5%-"), { locked = true, repeating = true })
|
||||
-- volume / brightness / media (locked so they work on the lock screen;
|
||||
-- volume and brightness repeat on hold). Everything goes through
|
||||
-- swayosd-client, which applies the change and draws the OSD popup;
|
||||
-- store paths because Hyprland execs these with the login PATH, which
|
||||
-- doesn't pick up profile changes made after the session started.
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("${osd} --output-volume raise"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("${osd} --output-volume lower"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("${osd} --brightness raise"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("${osd} --brightness lower"), { locked = true, repeating = true })
|
||||
|
||||
-- media keys (locked)
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("pactl set-sink-mute @DEFAULT_SINK@ toggle"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("volumectl -m toggle-mute"), { locked = true })
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("${osd} --output-volume mute-toggle"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("${osd} --input-volume mute-toggle"), { locked = true })
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("${osd} --playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("${osd} --playerctl prev"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("${osd} --playerctl play-pause"), { locked = true })
|
||||
|
||||
-- move/resize windows with mod + LMB/RMB drag
|
||||
hl.bind(mod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
|
||||
@@ -44,5 +44,41 @@
|
||||
};
|
||||
};
|
||||
|
||||
# swayosd: the on-screen volume/brightness/caps-lock popup. Noctalia drew this
|
||||
# before; without it the XF86 keys still work but give no feedback, which reads
|
||||
# as "the keys are dead". swayosd-client does the change *and* the popup, so the
|
||||
# binds in default.nix call it instead of wpctl/brightnessctl directly.
|
||||
services.swayosd = {
|
||||
enable = true;
|
||||
topMargin = 0.85;
|
||||
stylePath = pkgs.writeText "swayosd-style.css" ''
|
||||
window#osd {
|
||||
padding: 12px 20px;
|
||||
border-radius: 12px;
|
||||
border: 1px solid #4c566a;
|
||||
background: alpha(#2e3440, 0.94);
|
||||
}
|
||||
|
||||
window#osd #container { margin: 12px; }
|
||||
|
||||
window#osd image,
|
||||
window#osd label { color: #eceff4; }
|
||||
|
||||
window#osd progressbar:disabled { opacity: 0.5; }
|
||||
|
||||
window#osd trough {
|
||||
min-height: 6px;
|
||||
border-radius: 6px;
|
||||
background: #434c5e;
|
||||
}
|
||||
|
||||
window#osd progress {
|
||||
min-height: 6px;
|
||||
border-radius: 6px;
|
||||
background: #88c0d0;
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
services.hyprpolkitagent.enable = true;
|
||||
}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
Screenshots: stored in ~/downloads/screenshots, with date time in the filename
|
||||
@@ -1,100 +0,0 @@
|
||||
---
|
||||
description: Merge worktree changes and clean up safely
|
||||
---
|
||||
|
||||
# Merge Worktree and Cleanup
|
||||
|
||||
Merge changes from the current worktree into a target branch and clean up the worktree.
|
||||
|
||||
**Usage:** `/merge [target-branch]`
|
||||
|
||||
**Arguments:**
|
||||
- `$1`: Target branch to merge into (default: auto-detect main/master)
|
||||
|
||||
## Process
|
||||
|
||||
### 1. Pre-flight Checks
|
||||
|
||||
```bash
|
||||
CURRENT_BRANCH=$(git branch --show-current)
|
||||
WORKTREE_DIR=$(git rev-parse --git-common-dir)
|
||||
|
||||
if [[ ! "$WORKTREE_DIR" == *".git/worktrees"* ]]; then
|
||||
echo "❌ Error: You're not in a worktree"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! git diff-index --quiet HEAD --; then
|
||||
echo "❌ Error: You have uncommitted changes"
|
||||
git status --short
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
### 2. Determine Target Branch
|
||||
|
||||
```bash
|
||||
TARGET_BRANCH="${1:-}"
|
||||
if [ -z "$TARGET_BRANCH" ]; then
|
||||
if git show-ref --verify --quiet refs/heads/main; then
|
||||
TARGET_BRANCH="main"
|
||||
elif git show-ref --verify --quiet refs/heads/master; then
|
||||
TARGET_BRANCH="master"
|
||||
else
|
||||
echo "❌ Error: Cannot auto-detect main branch"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
```
|
||||
|
||||
### 3. Update Target Branch
|
||||
|
||||
```bash
|
||||
WORKTREE_PATH=$(pwd)
|
||||
COMMON_DIR=$(git rev-parse --git-common-dir)
|
||||
REPO_ROOT=$(echo "$COMMON_DIR" | sed 's/\.git.*//' | sed 's/\/$//')
|
||||
if [ "$COMMON_DIR" = ".git" ]; then
|
||||
REPO_ROOT=$(git rev-parse --show-toplevel)
|
||||
fi
|
||||
|
||||
cd "$REPO_ROOT"
|
||||
git checkout "$TARGET_BRANCH"
|
||||
git pull origin "$TARGET_BRANCH"
|
||||
```
|
||||
|
||||
### 4. Merge
|
||||
|
||||
```bash
|
||||
git merge --no-ff "$CURRENT_BRANCH" -m "Merge branch '$CURRENT_BRANCH'"
|
||||
```
|
||||
|
||||
If you prefer a squash merge, do this instead:
|
||||
|
||||
```bash
|
||||
git merge --squash "$CURRENT_BRANCH"
|
||||
git commit -m "feat: <summary>"
|
||||
```
|
||||
|
||||
### 5. Push and Clean Up
|
||||
|
||||
```bash
|
||||
git push origin "$TARGET_BRANCH"
|
||||
|
||||
git worktree remove "$WORKTREE_PATH" --force || rm -rf "$WORKTREE_PATH"
|
||||
git branch -d "$CURRENT_BRANCH" || git branch -D "$CURRENT_BRANCH"
|
||||
```
|
||||
|
||||
### 6. Optional: Delete Remote Branch
|
||||
|
||||
```bash
|
||||
git push origin --delete "$CURRENT_BRANCH"
|
||||
```
|
||||
|
||||
## Language-specific checks
|
||||
|
||||
### Rust
|
||||
- `cargo check`
|
||||
- `cargo clippy` (clean up new warnings)
|
||||
|
||||
### TypeScript
|
||||
- `tsc`
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
description: Rebase/merge upstream changes into the current branch
|
||||
---
|
||||
This command should only work while in a secondary branch (not main or master).
|
||||
|
||||
Commit any unstaged changes
|
||||
Fetch updates from the origin repo
|
||||
If there are new commits on the parent branch (typically origin/main), then merge them back into the current branch
|
||||
Solve any conflicts, and analyze the incoming changes to see if additional changes are required to the branch's code (e.g.: if something was renamed in the meantime in main, our new code may need to be adjusted)
|
||||
@@ -1,12 +1,13 @@
|
||||
_:
|
||||
{
|
||||
# Global rules (opencode/AGENTS.md) and the shared commands (merge, update)
|
||||
# come from the agent-skills home-manager module — opencode has no @file
|
||||
# imports, so the module concatenates the shared fragments into one file.
|
||||
# opencode also auto-loads skills from ~/.claude/skills and ~/.agents/skills.
|
||||
xdg.configFile = {
|
||||
# Global config file
|
||||
"opencode/opencode.json".source = ./opencode.json;
|
||||
|
||||
# Global rules (equivalent to ~/.claude/CLAUDE.md)
|
||||
"opencode/AGENTS.md".source = ./AGENTS.md;
|
||||
|
||||
# Custom agents
|
||||
"opencode/agents/oracle.md".source = ./agents/oracle.md;
|
||||
"opencode/agents/explorer.md".source = ./agents/explorer.md;
|
||||
@@ -16,10 +17,8 @@ _:
|
||||
"opencode/agents/designer-bold.md".source = ./agents/designer-bold.md;
|
||||
"opencode/agents/analyze-branch.md".source = ./agents/analyze-branch.md;
|
||||
|
||||
# Global commands
|
||||
# Global commands (opencode-specific ones only)
|
||||
"opencode/commands/work.md".source = ./commands/work.md;
|
||||
"opencode/commands/merge.md".source = ./commands/merge.md;
|
||||
"opencode/commands/update.md".source = ./commands/update.md;
|
||||
"opencode/commands/smart-debug.md".source = ./commands/smart-debug.md;
|
||||
"opencode/commands/tdd-cycle.md".source = ./commands/tdd-cycle.md;
|
||||
"opencode/commands/security-scan.md".source = ./commands/security-scan.md;
|
||||
|
||||
@@ -1,32 +1,12 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
pi = pkgs.callPackage ../../../pkgs/pi/package.nix { };
|
||||
|
||||
skills = inputs.agent-skills;
|
||||
|
||||
# pi has no `@file` imports in context files, so fragments get concatenated
|
||||
# into one AGENTS.md. Skills need no wiring: pi reads ~/.agents/skills, which
|
||||
# the agent-skills module already links.
|
||||
agentsMd = pkgs.writeText "pi-AGENTS.md" (
|
||||
lib.concatMapStringsSep "\n" builtins.readFile [
|
||||
"${skills}/claude-md/machines/${config.programs.agentSkills.machine}.md"
|
||||
"${skills}/claude-md/operating.md"
|
||||
"${skills}/claude-md/writing.md"
|
||||
"${skills}/claude-md/code-comments.md"
|
||||
"${skills}/claude-md/RTK.md"
|
||||
]
|
||||
);
|
||||
in
|
||||
{
|
||||
home.packages = [ pi ];
|
||||
|
||||
# ~/.pi/agent/AGENTS.md comes from the agent-skills home-manager module
|
||||
# (pi has no @file imports, so the module concatenates the shared fragments).
|
||||
# Pi reads skills straight from ~/.agents/skills, which the module links.
|
||||
# Settings stay unmanaged: pi writes ~/.pi/agent/settings.json itself from
|
||||
# /settings, /trust and `pi config`.
|
||||
home.file.".pi/agent/AGENTS.md".source = agentsMd;
|
||||
home.packages = [ pi ];
|
||||
}
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
# T3 Code: open-source desktop control plane for coding agents (x86_64 only).
|
||||
# Shares the custom.aiApps.deviceScaleFactor knob (defined in ../claude).
|
||||
t3-code = pkgs.callPackage ../../../pkgs/t3-code/package.nix {
|
||||
inherit (config.custom.aiApps) deviceScaleFactor;
|
||||
};
|
||||
in
|
||||
{
|
||||
home.packages = lib.optional pkgs.stdenv.hostPlatform.isx86_64 t3-code;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [ ./desktop/spicetify.nix ];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
obsidian
|
||||
obs-studio
|
||||
kooha
|
||||
vokoscreen-ng
|
||||
gimp
|
||||
font-manager
|
||||
xournalpp
|
||||
remmina
|
||||
slack
|
||||
signal-desktop
|
||||
zoom-us
|
||||
yaak
|
||||
bun
|
||||
];
|
||||
}
|
||||
@@ -5,6 +5,10 @@
|
||||
imports = [
|
||||
../common/programs/default.nix
|
||||
../common/programs/desktop
|
||||
../common/programs/workstation-apps.nix
|
||||
../common/programs/editors.nix
|
||||
../common/programs/dev-workstation.nix
|
||||
../common/programs/ai-gui.nix
|
||||
../common/programs/zen-browser.nix
|
||||
../common/programs/hyprland
|
||||
../common/programs/kitty
|
||||
|
||||
@@ -64,7 +64,14 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
programs.agentSkills.machine = "yolo";
|
||||
# This is the one box that runs the agent-skills units; each starts a session,
|
||||
# so a second machine enabling them would run the same job twice.
|
||||
programs.agentSkills = {
|
||||
machine = "yolo";
|
||||
prDaemon.enable = true;
|
||||
hourlog.enable = true;
|
||||
weekReview.enable = true;
|
||||
};
|
||||
programs.nh.flake = "/home/naps62/tea/nixos-config";
|
||||
|
||||
# Idle lock and dpms-off blank the virtual output: Sunshine then captures a
|
||||
|
||||
+3
-55
@@ -92,60 +92,8 @@ in
|
||||
};
|
||||
Install.WantedBy = [ "default.target" ];
|
||||
};
|
||||
|
||||
hourlog = {
|
||||
Unit = {
|
||||
Description = "Start the Friday hour log in a tmux session";
|
||||
Documentation = [ "https://git.naps.pt/yolo/agent-skills" ];
|
||||
ConditionPathIsDirectory = "%h/tea/agent-skills";
|
||||
};
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "%h/tea/agent-skills/bin/hourlog-session.sh";
|
||||
Environment = [ "PATH=${toolPath}" ];
|
||||
# This unit may be what starts the tmux server; the default cgroup kill
|
||||
# would take it back down as soon as ExecStart returns.
|
||||
KillMode = "process";
|
||||
};
|
||||
};
|
||||
|
||||
week-review = {
|
||||
Unit = {
|
||||
Description = "Start the weekly agent-skills review in a tmux session";
|
||||
Documentation = [ "https://git.naps.pt/yolo/agent-skills" ];
|
||||
ConditionPathIsDirectory = "%h/tea/agent-skills";
|
||||
};
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "%h/tea/agent-skills/bin/week-review-session.sh";
|
||||
Environment = [ "PATH=${toolPath}" ];
|
||||
KillMode = "process";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.timers = {
|
||||
hourlog = {
|
||||
Unit.Description = "Friday hour log, 18:00 Europe/Lisbon";
|
||||
Timer = {
|
||||
# Zone suffix pinned because the machine clock is UTC; keeps it at 18:00
|
||||
# wall time across DST.
|
||||
OnCalendar = "Fri 18:00 Europe/Lisbon";
|
||||
Persistent = true;
|
||||
AccuracySec = "1min";
|
||||
};
|
||||
Install.WantedBy = [ "timers.target" ];
|
||||
};
|
||||
|
||||
week-review = {
|
||||
Unit.Description = "Weekly agent-skills review, Fridays 17:00 Europe/Lisbon";
|
||||
Timer = {
|
||||
OnCalendar = "Fri 17:00 Europe/Lisbon";
|
||||
Persistent = true;
|
||||
AccuracySec = "1min";
|
||||
};
|
||||
Install.WantedBy = [ "timers.target" ];
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
# pr-daemon, hourlog and week-review are not here: their units ship with the
|
||||
# scripts they run, in the agent-skills module. This host opts in with
|
||||
# programs.agentSkills.*.enable in home/yolo/default.nix.
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
sddm-noctalia-theme = pkgs.callPackage ../../../../pkgs/sddm-noctalia-theme/package.nix { };
|
||||
in
|
||||
{
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
@@ -15,7 +12,7 @@ in
|
||||
services.displayManager.sddm = {
|
||||
enable = true;
|
||||
wayland.enable = true;
|
||||
theme = "sddm-noctalia";
|
||||
theme = "sddm-astronaut-theme";
|
||||
package = pkgs.kdePackages.sddm;
|
||||
extraPackages = with pkgs.kdePackages; [
|
||||
qtmultimedia
|
||||
@@ -26,6 +23,6 @@ in
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
sddm-noctalia-theme
|
||||
sddm-astronaut
|
||||
];
|
||||
}
|
||||
|
||||
@@ -10,6 +10,13 @@
|
||||
portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
||||
};
|
||||
|
||||
# swayosd (the volume/brightness OSD, configured in home) writes
|
||||
# /sys/class/backlight/*/brightness directly. The package ships a udev rule
|
||||
# that chgrps those files to `video`; without both the rule and the group,
|
||||
# brightness keys pop the OSD but change nothing.
|
||||
services.udev.packages = [ pkgs.swayosd ];
|
||||
users.users.naps62.extraGroups = [ "video" ];
|
||||
|
||||
# GTK/GNOME services still useful on Wayland
|
||||
programs.dconf.enable = true;
|
||||
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
pkgs.stdenv.mkDerivation {
|
||||
pname = "sddm-noctalia-theme";
|
||||
version = "1.0";
|
||||
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "mahaveergurjar";
|
||||
repo = "sddm";
|
||||
rev = "noctalia";
|
||||
sha256 = "sha256-e/gYI6znHXxlDCOVh4p265x3kO0nQUU897hCY1yEz88=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/sddm/themes/sddm-noctalia
|
||||
cp -r * $out/share/sddm/themes/sddm-noctalia/
|
||||
|
||||
# Patch for Qt6 SDDM greeter compatibility
|
||||
# SDDM reads QtVersion from metadata.desktop to find the greeter binary;
|
||||
# default is 5 (sddm-greeter), we need 6 (sddm-greeter-qt6)
|
||||
substituteInPlace $out/share/sddm/themes/sddm-noctalia/metadata.desktop \
|
||||
--replace-fail "Theme-Id=noctalia" "QtVersion=6
|
||||
Theme-Id=noctalia"
|
||||
|
||||
'';
|
||||
|
||||
meta = with pkgs.lib; {
|
||||
description = "Noctalia-themed SDDM login theme";
|
||||
homepage = "https://github.com/mahaveergurjar/sddm/tree/noctalia";
|
||||
license = licenses.gpl3;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user