Compare commits

..

3 commits
main ... main

32 changed files with 89 additions and 746 deletions

View file

@ -17,6 +17,7 @@ in {
# See https://search.nixos.org/packages for all options # See https://search.nixos.org/packages for all options
home.packages = lib.lists.optionals userConfig.isDesktopUser ( home.packages = lib.lists.optionals userConfig.isDesktopUser (
with pkgs; [ with pkgs; [
ungoogled-chromium
gnomeExtensions.dash-to-panel gnomeExtensions.dash-to-panel
] ]
); );
@ -60,7 +61,6 @@ in {
steam.enable = true; steam.enable = true;
piper.enable = hardware.piperMouse.enable; piper.enable = hardware.piperMouse.enable;
krita.enable = true; krita.enable = true;
ungoogled-chromium.enable = true;
}) })
]; ];
}; };

View file

@ -37,12 +37,6 @@ in {
dbeaver-bin.enable = true; dbeaver-bin.enable = true;
bruno.enable = true; bruno.enable = true;
piper.enable = hardware.piperMouse.enable; piper.enable = hardware.piperMouse.enable;
proxmark3.enable = true;
openrgb.enable = hardware.openRGB.enable;
via.enable = hardware.viaKeyboard.enable;
claude-code.enable = osConfig.host.ai.enable;
davinci-resolve.enable = hardware.graphicsAcceleration.enable;
mfoc.enable = true;
}) })
(lib.mkIf (hardware.directAccess.enable && config.user.isDesktopUser) { (lib.mkIf (hardware.directAccess.enable && config.user.isDesktopUser) {
anki.enable = true; anki.enable = true;
@ -56,20 +50,6 @@ in {
firefox.enable = true; firefox.enable = true;
steam.enable = true; steam.enable = true;
krita.enable = true; krita.enable = true;
ungoogled-chromium.enable = true;
libreoffice.enable = true;
mapillary-uploader.enable = true;
inkscape.enable = true;
gimp.enable = true;
freecad.enable = true;
onionshare.enable = true;
pdfarranger.enable = true;
picard.enable = true;
qflipper.enable = true;
openvpn.enable = true;
noisetorch.enable = true;
tor-browser.enable = true;
gdx-liftoff.enable = true;
}) })
]; ];
} }
@ -86,6 +66,53 @@ in {
nixpkgs.config = { nixpkgs.config = {
allowUnfree = true; allowUnfree = true;
}; };
home.packages = (
(with pkgs; [
proxmark3
])
++ (
lib.lists.optionals hardware.directAccess.enable (with pkgs; [
#foss platforms
ungoogled-chromium
libreoffice
inkscape
gimp
freecad
# cura
# kicad-small
onionshare
# rhythmbox
# wireshark
# rpi-imager
# fritzing
mfoc
tor-browser
pdfarranger
picard
gdx-liftoff
# proprietary platforms
(lib.mkIf hardware.graphicsAcceleration.enable davinci-resolve)
# development tools
# androidStudioPackages.canary
qFlipper
# system tools
openvpn
noisetorch
# hardware management tools
(lib.mkIf hardware.openRGB.enable openrgb)
(lib.mkIf hardware.viaKeyboard.enable via)
(lib.mkIf osConfig.host.ai.enable claude-code)
])
)
);
}) })
]; ];
} }

View file

@ -72,34 +72,12 @@ in {
enable = true; enable = true;
mcp = { mcp = {
nixos.enable = true; nixos.enable = true;
eslint = { eslint.enable = true;
enable = true;
autoApprove = {
lint-files = true;
};
};
vitest = {
enable = true;
autoApprove = {
list_tests = true;
run_tests = true;
analyze_coverage = true;
};
};
sleep = {
enable = true;
timeout = 18000; # 5 hours to match claude codes timeout
autoApprove = {
sleep = true;
};
};
}; };
}; };
# misc extensions # misc extensions
evenBetterToml.enable = true; evenBetterToml.enable = true;
direnv.enable = config.programs.direnv.enable;
conventionalCommits.enable = true;
}; };
extensions = let extensions = let

View file

@ -67,6 +67,8 @@
}; };
}; };
services.tailscale.enable = true;
# Configure keymap in X11 # Configure keymap in X11
# services.xserver.xkb.layout = "us"; # services.xserver.xkb.layout = "us";
# services.xserver.xkb.options = "eurosign:e,caps:escape"; # services.xserver.xkb.options = "eurosign:e,caps:escape";

42
flake.lock generated
View file

@ -25,11 +25,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1757255839, "lastModified": 1756733629,
"narHash": "sha256-XH33B1X888Xc/xEXhF1RPq/kzKElM0D5C9N6YdvOvIc=", "narHash": "sha256-dwWGlDhcO5SMIvMSTB4mjQ5Pvo2vtxvpIknhVnSz2I8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "c8a0e78d86b12ea67be6ed0f7cae7f9bfabae75a", "rev": "a5c4f2ab72e3d1ab43e3e65aa421c6f2bd2e12a1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -46,11 +46,11 @@
}, },
"locked": { "locked": {
"dir": "pkgs/firefox-addons", "dir": "pkgs/firefox-addons",
"lastModified": 1757304222, "lastModified": 1756699417,
"narHash": "sha256-s070stByAXxeCLgftTXxFxZ2ynJhghne4Y6cTuqGAaw=", "narHash": "sha256-rpRy5ae5ijEGaK+Cr66NqCQJ6ZeUE5Zi8gUWgKhesto=",
"owner": "rycee", "owner": "rycee",
"repo": "nur-expressions", "repo": "nur-expressions",
"rev": "fa312c0175ffb82bc67da095439b9cb683ac52bd", "rev": "007b803d1eff595d25e7886e83054dbd038bf029",
"type": "gitlab" "type": "gitlab"
}, },
"original": { "original": {
@ -118,11 +118,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1757256385, "lastModified": 1756734952,
"narHash": "sha256-WK7tOhWwr15mipcckhDg2no/eSpM1nIh4C9le8HgHhk=", "narHash": "sha256-H6jmduj4QIncLPAPODPSG/8ry9lpr1kRq6fYytU52qU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "f35703b412c67b48e97beb6e27a6ab96a084cd37", "rev": "29ab63bbb3d9eee4a491f7ce701b189becd34068",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -175,11 +175,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1757130842, "lastModified": 1755825449,
"narHash": "sha256-4i7KKuXesSZGUv0cLPLfxbmF1S72Gf/3aSypgvVkwuA=", "narHash": "sha256-XkiN4NM9Xdy59h69Pc+Vg4PxkSm9EWl6u7k6D5FZ5cM=",
"owner": "LnL7", "owner": "LnL7",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "15f067638e2887c58c4b6ba1bdb65a0b61dc58c5", "rev": "8df64f819698c1fee0c2969696f54a843b2231e8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -217,11 +217,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1757296711, "lastModified": 1756692643,
"narHash": "sha256-7u9/tXUdmTj8x7ofet8aELLBlCHSoA+QOhYKheRdacM=", "narHash": "sha256-SVos3AYuLvF6bD8Y0b6EiLABoEaiAOa4M/fTCBe0FV8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-vscode-extensions", "repo": "nix-vscode-extensions",
"rev": "ab9374ac8c162dacffcd4400e668fd7f9b6f173a", "rev": "2f1d16db96f1ce8ee3c893ea9dc49c0035846988",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -232,11 +232,11 @@
}, },
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1757103352, "lastModified": 1756245047,
"narHash": "sha256-PtT7ix43ss8PONJ1VJw3f6t2yAoGH+q462Sn8lrmWmk=", "narHash": "sha256-9bHzrVbjAudbO8q4vYFBWlEkDam31fsz0J7GB8k4AsI=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "11b2a10c7be726321bb854403fdeec391e798bf0", "rev": "a65b650d6981e23edd1afa1f01eb942f19cdcbb7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -264,11 +264,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1757068644, "lastModified": 1756542300,
"narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=", "narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9", "rev": "d7600c775f877cd87b4f5a831c28aa94137377aa",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -22,8 +22,5 @@
(final: prev: { (final: prev: {
codium-extensions = pkgs.callPackage ./codium-extensions {}; codium-extensions = pkgs.callPackage ./codium-extensions {};
}) })
(final: prev: {
mapillary-uploader = pkgs.callPackage ./mapillary-uploader.nix {};
})
]; ];
} }

View file

@ -1,42 +0,0 @@
{
lib,
fetchurl,
appimageTools,
}: let
pname = "mapillary-uploader";
version = "4.7.2"; # Based on the application output
src = fetchurl {
url = "https://tools.mapillary.com/uploader/download/linux";
name = "mapillary-uploader.AppImage";
sha256 = "sha256-Oyx7AIdA/2mwBaq7UzXOoyq/z2SU2sViMN40sY2RCQw=";
};
appimageContents = appimageTools.extractType2 {
inherit pname version src;
};
in
appimageTools.wrapType2 {
inherit pname version src;
extraInstallCommands = ''
# Install desktop file
install -Dm644 ${appimageContents}/mapillary-desktop-uploader.desktop $out/share/applications/mapillary-uploader.desktop
# Install icon
install -Dm644 ${appimageContents}/usr/share/icons/hicolor/0x0/apps/mapillary-desktop-uploader.png $out/share/pixmaps/mapillary-uploader.png
# Fix desktop file paths
substituteInPlace $out/share/applications/mapillary-uploader.desktop \
--replace 'Exec=AppRun' 'Exec=${pname}'
'';
meta = with lib; {
description = "Mapillary Desktop Uploader - Upload street-level imagery to Mapillary";
homepage = "https://www.mapillary.com/";
license = licenses.unfree; # Mapillary's license terms
maintainers = [];
platforms = ["x86_64-linux"];
sourceProvenance = with sourceTypes; [binaryNativeCode];
};
}

View file

@ -1,30 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.davinci-resolve = {
enable = lib.mkEnableOption "enable davinci-resolve";
};
config = lib.mkIf config.programs.davinci-resolve.enable (lib.mkMerge [
{
home.packages = with pkgs; [
davinci-resolve
];
}
(
lib.mkIf osConfig.host.impermanence.enable {
home.persistence."/persist${config.home.homeDirectory}" = {
directories = [
"${config.xdg.dataHome}/DaVinciResolve"
"${config.xdg.configHome}/blackmagic"
];
allowOther = true;
};
}
)
]);
}

View file

@ -19,24 +19,5 @@
./dbeaver.nix ./dbeaver.nix
./steam.nix ./steam.nix
./vscode ./vscode
./ungoogled-chromium.nix
./libreoffice.nix
./mapillary-uploader.nix
./inkscape.nix
./gimp.nix
./proxmark3.nix
./freecad.nix
./onionshare.nix
./mfoc.nix
./pdfarranger.nix
./picard.nix
./qflipper.nix
./openvpn.nix
./noisetorch.nix
./openrgb.nix
./via.nix
./davinci-resolve.nix
./gdx-liftoff.nix
./tor-browser.nix
]; ];
} }

View file

@ -1,29 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.freecad = {
enable = lib.mkEnableOption "enable freecad";
};
config = lib.mkIf config.programs.freecad.enable (lib.mkMerge [
{
home.packages = with pkgs; [
freecad
];
}
(
lib.mkIf osConfig.host.impermanence.enable {
home.persistence."/persist${config.home.homeDirectory}" = {
directories = [
"${config.xdg.configHome}/FreeCAD"
];
allowOther = true;
};
}
)
]);
}

View file

@ -1,17 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.gdx-liftoff = {
enable = lib.mkEnableOption "enable gdx-liftoff";
};
config = lib.mkIf config.programs.gdx-liftoff.enable {
home.packages = with pkgs; [
gdx-liftoff
];
};
}

View file

@ -1,29 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.gimp = {
enable = lib.mkEnableOption "enable gimp";
};
config = lib.mkIf config.programs.gimp.enable (lib.mkMerge [
{
home.packages = with pkgs; [
gimp
];
}
(
lib.mkIf osConfig.host.impermanence.enable {
home.persistence."/persist${config.home.homeDirectory}" = {
directories = [
"${config.xdg.configHome}/GIMP"
];
allowOther = true;
};
}
)
]);
}

View file

@ -1,29 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.inkscape = {
enable = lib.mkEnableOption "enable inkscape";
};
config = lib.mkIf config.programs.inkscape.enable (lib.mkMerge [
{
home.packages = with pkgs; [
inkscape
];
}
(
lib.mkIf osConfig.host.impermanence.enable {
home.persistence."/persist${config.home.homeDirectory}" = {
directories = [
"${config.xdg.configHome}/inkscape"
];
allowOther = true;
};
}
)
]);
}

View file

@ -1,29 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.libreoffice = {
enable = lib.mkEnableOption "enable libreoffice";
};
config = lib.mkIf config.programs.libreoffice.enable (lib.mkMerge [
{
home.packages = with pkgs; [
libreoffice
];
}
(
lib.mkIf osConfig.host.impermanence.enable {
home.persistence."/persist${config.home.homeDirectory}" = {
directories = [
"${config.xdg.configHome}/libreoffice"
];
allowOther = true;
};
}
)
]);
}

View file

@ -1,17 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.programs.mapillary-uploader;
in {
options.programs.mapillary-uploader = {
enable = mkEnableOption "Mapillary Desktop Uploader";
};
config = mkIf cfg.enable {
home.packages = [pkgs.mapillary-uploader];
};
}

View file

@ -1,17 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.mfoc = {
enable = lib.mkEnableOption "enable mfoc";
};
config = lib.mkIf config.programs.mfoc.enable {
home.packages = with pkgs; [
mfoc
];
};
}

View file

@ -1,17 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.noisetorch = {
enable = lib.mkEnableOption "enable noisetorch";
};
config = lib.mkIf config.programs.noisetorch.enable {
home.packages = with pkgs; [
noisetorch
];
};
}

View file

@ -1,17 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.onionshare = {
enable = lib.mkEnableOption "enable onionshare";
};
config = lib.mkIf config.programs.onionshare.enable {
home.packages = with pkgs; [
onionshare
];
};
}

View file

@ -1,17 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.openrgb = {
enable = lib.mkEnableOption "enable openrgb";
};
config = lib.mkIf config.programs.openrgb.enable {
home.packages = with pkgs; [
openrgb
];
};
}

View file

@ -1,17 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.openvpn = {
enable = lib.mkEnableOption "enable openvpn";
};
config = lib.mkIf config.programs.openvpn.enable {
home.packages = with pkgs; [
openvpn
];
};
}

View file

@ -1,17 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.pdfarranger = {
enable = lib.mkEnableOption "enable pdfarranger";
};
config = lib.mkIf config.programs.pdfarranger.enable {
home.packages = with pkgs; [
pdfarranger
];
};
}

View file

@ -1,29 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.picard = {
enable = lib.mkEnableOption "enable picard";
};
config = lib.mkIf config.programs.picard.enable (lib.mkMerge [
{
home.packages = with pkgs; [
picard
];
}
(
lib.mkIf osConfig.host.impermanence.enable {
home.persistence."/persist${config.home.homeDirectory}" = {
directories = [
"${config.xdg.configHome}/MusicBrainz"
];
allowOther = true;
};
}
)
]);
}

View file

@ -1,17 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.proxmark3 = {
enable = lib.mkEnableOption "enable proxmark3";
};
config = lib.mkIf config.programs.proxmark3.enable {
home.packages = with pkgs; [
proxmark3
];
};
}

View file

@ -1,29 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.qflipper = {
enable = lib.mkEnableOption "enable qflipper";
};
config = lib.mkIf config.programs.qflipper.enable (lib.mkMerge [
{
home.packages = with pkgs; [
qFlipper
];
}
(
lib.mkIf osConfig.host.impermanence.enable {
home.persistence."/persist${config.home.homeDirectory}" = {
directories = [
"${config.xdg.configHome}/qFlipper"
];
allowOther = true;
};
}
)
]);
}

View file

@ -1,29 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.tor-browser = {
enable = lib.mkEnableOption "enable tor-browser";
};
config = lib.mkIf config.programs.tor-browser.enable (lib.mkMerge [
{
home.packages = with pkgs; [
tor-browser
];
}
(
lib.mkIf osConfig.host.impermanence.enable {
home.persistence."/persist${config.home.homeDirectory}" = {
directories = [
"${config.xdg.dataHome}/torbrowser"
];
allowOther = true;
};
}
)
]);
}

View file

@ -1,29 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.ungoogled-chromium = {
enable = lib.mkEnableOption "enable ungoogled-chromium";
};
config = lib.mkIf config.programs.ungoogled-chromium.enable (lib.mkMerge [
{
home.packages = with pkgs; [
ungoogled-chromium
];
}
(
lib.mkIf osConfig.host.impermanence.enable {
home.persistence."/persist${config.home.homeDirectory}" = {
directories = [
"${config.xdg.configHome}/chromium"
];
allowOther = true;
};
}
)
]);
}

View file

@ -1,17 +0,0 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
options.programs.via = {
enable = lib.mkEnableOption "enable via";
};
config = lib.mkIf config.programs.via.enable {
home.packages = with pkgs; [
via
];
};
}

View file

@ -10,6 +10,10 @@
mcp-nixos = inputs.mcp-nixos.packages.${pkgs.stdenv.hostPlatform.system}.default; mcp-nixos = inputs.mcp-nixos.packages.${pkgs.stdenv.hostPlatform.system}.default;
mcp-eslint = pkgs.writeShellScriptBin "mcp-eslint" ''
${pkgs.nodejs}/bin/npx --yes @modelcontextprotocol/server-eslint "$@"
'';
anyProfileHasMcpNixos = lib.any ( anyProfileHasMcpNixos = lib.any (
profile: profile:
profile.extraExtensions.claudeDev.enable profile.extraExtensions.claudeDev.enable
@ -21,44 +25,6 @@
profile.extraExtensions.claudeDev.enable profile.extraExtensions.claudeDev.enable
&& profile.extraExtensions.claudeDev.mcp.eslint.enable && profile.extraExtensions.claudeDev.mcp.eslint.enable
) (lib.attrValues config.programs.vscode.profiles); ) (lib.attrValues config.programs.vscode.profiles);
anyProfileHasMcpVitest = lib.any (
profile:
profile.extraExtensions.claudeDev.enable
&& profile.extraExtensions.claudeDev.mcp.vitest.enable
) (lib.attrValues config.programs.vscode.profiles);
anyProfileHasMcpSleep = lib.any (
profile:
profile.extraExtensions.claudeDev.enable
&& profile.extraExtensions.claudeDev.mcp.sleep.enable
) (lib.attrValues config.programs.vscode.profiles);
anyProfileHasMcp = anyProfileHasMcpNixos || anyProfileHasMcpEslint || anyProfileHasMcpVitest || anyProfileHasMcpSleep;
getMcpTimeout = serverName:
lib.findFirst (timeout: timeout != null) null (map (
profile:
if profile.extraExtensions.claudeDev.enable && profile.extraExtensions.claudeDev.mcp.${serverName}.enable
then profile.extraExtensions.claudeDev.mcp.${serverName}.timeout
else null
) (lib.attrValues config.programs.vscode.profiles));
getMcpAutoApprove = serverName:
lib.foldl' (
acc: profile:
if profile.extraExtensions.claudeDev.enable && profile.extraExtensions.claudeDev.mcp.${serverName}.enable
then acc // profile.extraExtensions.claudeDev.mcp.${serverName}.autoApprove
else acc
) {} (lib.attrValues config.programs.vscode.profiles);
getMcpPackage = serverName:
lib.findFirst (package: package != null) null (map (
profile:
if profile.extraExtensions.claudeDev.enable && profile.extraExtensions.claudeDev.mcp.${serverName}.enable
then profile.extraExtensions.claudeDev.mcp.${serverName}.package
else null
) (lib.attrValues config.programs.vscode.profiles));
in { in {
options.programs.vscode.profiles = lib.mkOption { options.programs.vscode.profiles = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { type = lib.types.attrsOf (lib.types.submodule ({config, ...}: {
@ -75,53 +41,6 @@ in {
}; };
eslint = { eslint = {
enable = lib.mkEnableOption "enable ESLint MCP server for Claude Dev"; enable = lib.mkEnableOption "enable ESLint MCP server for Claude Dev";
package = lib.mkOption {
type = lib.types.str;
default = "@eslint/mcp@latest";
description = "NPM package to use for ESLint MCP server";
};
timeout = lib.mkOption {
type = lib.types.nullOr lib.types.int;
default = null;
description = "Timeout in seconds for ESLint MCP server operations";
};
autoApprove = {
lint-files = lib.mkEnableOption "Should the lint-files tool be auto approved for ESLint MCP server";
};
};
vitest = {
enable = lib.mkEnableOption "enable Vitest MCP server for Claude Dev";
package = lib.mkOption {
type = lib.types.str;
default = "@djankies/vitest-mcp";
description = "NPM package to use for Vitest MCP server";
};
timeout = lib.mkOption {
type = lib.types.nullOr lib.types.int;
default = null;
description = "Timeout in seconds for Vitest MCP server operations";
};
autoApprove = {
list_tests = lib.mkEnableOption "Should the list_tests tool be auto approved for Vitest MCP server";
run_tests = lib.mkEnableOption "Should the run_tests tool be auto approved for Vitest MCP server";
analyze_coverage = lib.mkEnableOption "Should the analyze_coverage tool be auto approved for Vitest MCP server";
};
};
sleep = {
enable = lib.mkEnableOption "enable Sleep MCP server for Claude Dev";
package = lib.mkOption {
type = lib.types.str;
default = "sleep-mcp";
description = "NPM package to use for Sleep MCP server";
};
timeout = lib.mkOption {
type = lib.types.nullOr lib.types.int;
default = null;
description = "Timeout in seconds for Sleep MCP server operations";
};
autoApprove = {
sleep = lib.mkEnableOption "Should the sleep tool be auto approved for Sleep MCP server";
};
}; };
}; };
}; };
@ -141,7 +60,14 @@ in {
]; ];
}) })
(lib.mkIf anyProfileHasMcp { (lib.mkIf anyProfileHasMcpEslint {
home.packages = [
mcp-eslint
pkgs.eslint
];
})
(lib.mkIf (anyProfileHasMcpNixos || anyProfileHasMcpEslint) {
home.file."${config.xdg.configHome}/VSCodium/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json" = { home.file."${config.xdg.configHome}/VSCodium/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json" = {
text = builtins.toJSON { text = builtins.toJSON {
mcpServers = mcpServers =
@ -151,43 +77,9 @@ in {
}; };
}) })
// (lib.optionalAttrs anyProfileHasMcpEslint { // (lib.optionalAttrs anyProfileHasMcpEslint {
eslint = eslint = {
{ command = "${mcp-eslint}/bin/mcp-eslint";
command = "${pkgs.nodejs}/bin/npx"; };
args = ["-y" (getMcpPackage "eslint")];
}
// (lib.optionalAttrs ((getMcpTimeout "eslint") != null) {
timeout = getMcpTimeout "eslint";
})
// (lib.optionalAttrs ((getMcpAutoApprove "eslint") != {}) {
autoApprove = builtins.attrNames (lib.filterAttrs (_: v: v) (getMcpAutoApprove "eslint"));
});
})
// (lib.optionalAttrs anyProfileHasMcpVitest {
vitest =
{
command = "${pkgs.nodejs}/bin/npx";
args = ["-y" (getMcpPackage "vitest")];
}
// (lib.optionalAttrs ((getMcpTimeout "vitest") != null) {
timeout = getMcpTimeout "vitest";
})
// (lib.optionalAttrs ((getMcpAutoApprove "vitest") != {}) {
autoApprove = builtins.attrNames (lib.filterAttrs (_: v: v) (getMcpAutoApprove "vitest"));
});
})
// (lib.optionalAttrs anyProfileHasMcpSleep {
sleep-mcp =
{
command = "${pkgs.nodejs}/bin/npx";
args = ["-y" (getMcpPackage "sleep")];
}
// (lib.optionalAttrs ((getMcpTimeout "sleep") != null) {
timeout = getMcpTimeout "sleep";
})
// (lib.optionalAttrs ((getMcpAutoApprove "sleep") != {}) {
autoApprove = builtins.attrNames (lib.filterAttrs (_: v: v) (getMcpAutoApprove "sleep"));
});
}); });
}; };
force = true; force = true;

View file

@ -1,34 +0,0 @@
{
lib,
pkgs,
config,
...
}: let
pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version;
pkgsRepository = pkgsRepositories.vscode-marketplace;
in {
options.programs.vscode.profiles = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule ({config, ...}: {
options = {
extraExtensions.conventionalCommits = {
enable = lib.mkEnableOption "Enable VSCode Conventional Commits extension";
extension = lib.mkPackageOption pkgsRepository "conventional-commits" {
default = ["vivaxy" "vscode-conventional-commits"];
};
gitmoji = lib.mkEnableOption "should emoji be prompted for as a part of the commit message./";
promptScopes = lib.mkEnableOption "prompting for scopes in conventional commits";
};
};
config = lib.mkIf config.extraExtensions.conventionalCommits.enable {
extensions = [config.extraExtensions.conventionalCommits.extension];
userSettings = {
"conventionalCommits.gitmoji" = config.extraExtensions.conventionalCommits.gitmoji;
"conventionalCommits.promptScopes" = config.extraExtensions.conventionalCommits.promptScopes;
};
};
}));
};
}

View file

@ -21,7 +21,5 @@
./claudeDev.nix ./claudeDev.nix
./nearley.nix ./nearley.nix
./vitest.nix ./vitest.nix
./direnv.nix
./conventionalCommits.nix
]; ];
} }

View file

@ -1,25 +0,0 @@
{
lib,
pkgs,
config,
...
}: let
pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version;
pkgsRepository = pkgsRepositories.vscode-marketplace;
in {
options.programs.vscode.profiles = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule ({config, ...}: {
options = {
extraExtensions.direnv = {
enable = lib.mkEnableOption "Enable direnv extension";
extension = lib.mkPackageOption pkgsRepository "direnv" {
default = ["mkhl" "direnv"];
};
};
};
config = lib.mkIf config.extraExtensions.direnv.enable {
extensions = [config.extraExtensions.direnv.extension];
};
}));
};
}

View file

@ -51,9 +51,10 @@ in {
}; };
}; };
services.paperless = { services.paperless = {
domain = "${config.services.paperless.subdomain}.${config.host.reverse_proxy.hostname}";
configureTika = true; configureTika = true;
settings = { settings = {
PAPERLESS_URL = "https://${config.services.paperless.subdomain}.${config.host.reverse_proxy.hostname}";
PAPERLESS_DBENGINE = "postgresql"; PAPERLESS_DBENGINE = "postgresql";
PAPERLESS_DBHOST = "/run/postgresql"; PAPERLESS_DBHOST = "/run/postgresql";
PAPERLESS_DBNAME = config.services.paperless.database.user; PAPERLESS_DBNAME = config.services.paperless.database.user;