Compare commits

...

6 Commits
main ... main

Author SHA1 Message Date
24a8ccfc8f Changes 2025-08-27 14:35:49 -04:00
33f45c4cad More nvidia fixes 2025-08-21 23:07:23 -04:00
fd3e5f781f Steam stuff 2025-08-21 00:29:50 -04:00
9dbf38ec77 VScode declarative 2025-08-20 22:05:07 -04:00
fa31e0738f Flameshot baybeeeeeeeee 2025-08-20 21:00:05 -04:00
d336c8bf9c Nix valet working 2025-08-17 20:51:39 -04:00
16 changed files with 738 additions and 57 deletions

BIN
assets/lockscreen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 MiB

88
flake.lock generated
View File

@ -115,6 +115,22 @@
"type": "github"
}
},
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
@ -178,6 +194,24 @@
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1705309234,
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"fromYaml": {
"flake": false,
"locked": {
@ -416,6 +450,22 @@
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1708161998,
"narHash": "sha256-6KnemmUorCvlcAvGziFosAVkrlWZGIc6UNT9GUYr0jQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "84d981bae8b5e783b3b548de505b22880559515f",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-23.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": {
"inputs": {
"flake-parts": [
@ -448,7 +498,8 @@
"my-assets": "my-assets",
"neovim-nightly-overlay": "neovim-nightly-overlay",
"nixpkgs": "nixpkgs_3",
"stylix": "stylix"
"stylix": "stylix",
"zig": "zig"
}
},
"stylix": {
@ -500,6 +551,21 @@
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tinted-foot": {
"flake": false,
"locked": {
@ -601,6 +667,26 @@
"repo": "treefmt-nix",
"type": "github"
}
},
"zig": {
"inputs": {
"flake-compat": "flake-compat_3",
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs_4"
},
"locked": {
"lastModified": 1755864794,
"narHash": "sha256-hgnov6RLA+DD4Uocs/vCbiH3/3sKvqiJOKHpdhGyVAI=",
"owner": "mitchellh",
"repo": "zig-overlay",
"rev": "5cd601f8760d2383210b7b8c8a45fc79388f3ddf",
"type": "github"
},
"original": {
"owner": "mitchellh",
"repo": "zig-overlay",
"type": "github"
}
}
},
"root": "root",

View File

@ -12,6 +12,7 @@
inputs.nixpkgs.follows = "nixpkgs";
};
neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay";
zig.url = "github:mitchellh/zig-overlay";
my-assets = {
url = "path:./assets";
@ -24,6 +25,7 @@
self,
nixpkgs,
my-assets,
zig,
...
}@inputs:
let
@ -32,6 +34,7 @@
# Common overlays for all hosts
overlays = [
inputs.neovim-nightly-overlay.overlays.default
inputs.zig.overlays.default
];
# Helper function to create a host configuration

View File

@ -175,8 +175,10 @@
# Enable home manager
home-manager = {
useGlobalPkgs = true;
extraSpecialArgs = {
inherit inputs;
zigpkg = pkgs.zigpkgs.master;
assets = assets;
};
users = {

View File

@ -9,7 +9,7 @@
{
imports = [
../common-config.nix
# ../../modules/system/nix-valet.nix
../../modules/system/nix-valet.nix
../../modules/system/device-management/logitech.nix
./hardware-configuration.nix
];
@ -21,15 +21,16 @@
];
};
fileSystems."/mnt/working-files" = {
fileSystems."/home/javi/working-files" = {
device = "/dev/disk/by-uuid/BE8EBBDA8EBB8A03";
fsType = "ntfs";
options = [
"uid=1000" # your user ID (check with `id -u`)
"gid=100" # your primary group ID (check with `id -g`)
"dmask=022" # dir permissions
"fmask=133" # file permissions
"fmask=022" # file permissions
"nofail"
"exec"
# make Nautilus show it with a friendly name/icon
"x-gvfs-show"
@ -40,6 +41,7 @@
environment = {
systemPackages = with pkgs; [
pkgs.ntfs3g
zigpkgs.master
];
};
}

View File

@ -60,6 +60,10 @@
# Golang
gr = "go run .";
gmt = "go mod tidy";
# Zig
zb = "zig build";
zbr = "zig build run";
};
# Additional bash configuration

View File

@ -0,0 +1,417 @@
{
config,
pkgs,
lib,
inputs,
zigpkg,
...
}:
{
programs.vscode = {
enable = true;
package = pkgs.vscode; # or pkgs.vscodium for the open-source version
# Extensions
extensions =
with pkgs.vscode-extensions;
[
# Misc
vscodevim.vim
eamodio.gitlens
christian-kohler.path-intellisense
catppuccin.catppuccin-vsc-icons
foxundermoon.shell-format
gruntfuggly.todo-tree
jdinhlife.gruvbox
redhat.ansible
redhat.vscode-yaml
shd101wyy.markdown-preview-enhanced
ms-vsliveshare.vsliveshare
pkief.material-icon-theme
tamasfe.even-better-toml
# PHP
bmewburn.vscode-intelephense-client
# Html/Front End Support
bradlc.vscode-tailwindcss
formulahendry.auto-close-tag
formulahendry.auto-rename-tag
svelte.svelte-vscode
vue.volar
# Go
golang.go
mikestead.dotenv
# Python
ms-python.debugpy
ms-python.python
ms-python.vscode-pylance
# Zig
ziglang.vscode-zig
# C++
ms-vscode.cpptools
ms-vscode.cmake-tools
# delgan.qml-format
# Nix
mkhl.direnv
jnoortheen.nix-ide
# adpyke.vscode-sql-formatter
# adrianwilczynski.alpine-js-intellisense
# anthropic.claude-code
# cierra.livewire-vscode
# neilbrayfield.php-docblocker
# zignd.html-css-class-completion
]
++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
# Extensions not in nixpkgs
{
name = "base16-tinted-themes";
publisher = "TintedTheming";
version = "0.27.0";
sha256 = "7wLBwfaXEoumAfp9kK5Mv1VaGffuGdoYMGZ+ZjN9G8Q=";
}
{
name = "vscode-laravel";
publisher = "laravel";
version = "1.0.14";
sha256 = "DEHr8kAGm6ShdQCThh7MUhv24Ghwg10mGDhZgUIojrY=";
}
{
name = "phpstorm-snippets";
publisher = "phiter";
version = "1.1.2";
sha256 = "EHEzM4YKYR+2r6RVun8tSjGYDsbriBPATNwxczEuqjQ=";
}
{
name = "laravel-blade";
publisher = "onecentlin";
version = "1.37.0";
sha256 = "q5CTRj746404yM9mhOWYAGTzt/8CJ7Fx4QUQSJ+LdLs=";
}
# Qt Extension Pack
{
name = "qt-qml";
publisher = "TheQtCompany";
version = "1.7.0";
sha256 = "QjfvZIcE4LcJU93YiYN/zykEluHtR7zVOwYiPL0k+cQ=";
}
{
name = "qt-ui";
publisher = "TheQtCompany";
version = "1.7.0";
sha256 = "XDOIyCZIUYPGfcszZMUkR9MHH+zrXZgympKNhcQwITY=";
}
{
name = "qt-core";
publisher = "TheQtCompany";
version = "1.7.0";
sha256 = "2413vMpvxSYBKpaD14sMgI92W8NtCYa/sJ7PZO62WfY=";
}
];
# User settings
userSettings = {
# Disable the fucking copilot chat
"github.copilot.chat.showChatPanel" = false;
"github.copilot.enable" = false;
"window.titleBarStyle" = "custom";
"window.customTitleBarVisibility" = "auto";
"workbench.colorTheme" = lib.mkForce "Gruvbox Dark Hard";
"git.autofetch" = true;
"editor.fontSize" = lib.mkForce 18;
"editor.snippetSuggestions" = "top";
"editor.formatOnPaste" = true;
"editor.formatOnSave" = true;
"qt-qml.qmlls.useQmlImportPathEnvVar" = true;
"[qml]" = {
"editor.defaultFormatter" = "Delgan.qml-format";
"editor.formatOnSave" = true;
};
"[yaml]" = {
"editor.formatOnSave" = false;
};
"[astro]" = {
"editor.formatOnSave" = false;
};
"[dockerfile]" = {
"editor.formatOnSave" = false;
"editor.formatOnPaste" = false;
"editor.formatOnType" = false;
"editor.defaultFormatter" = "ms-azuretools.vscode-containers";
};
"tailwindCSS.includeLanguages" = {
"templ" = "html";
};
"emmet.triggerExpansionOnTab" = true;
"editor.autoIndent" = "full";
"files.eol" = "\n";
"emmet.excludeLanguages" = [ ];
"emmet.includeLanguages" = {
"blade" = "html";
"templ" = "html";
"markdown" = "html";
};
"explorer.openEditors.visible" = 0;
"editor.tabCompletion" = "on";
"workbench.editor.highlightModifiedTabs" = true;
"git.enableSmartCommit" = true;
"extensions.ignoreRecommendations" = true;
"blade.format.enable" = true;
"editor.autoClosingBrackets" = "always";
"material-icon-theme.folders.theme" = "specific";
"security.workspace.trust.untrustedFiles" = "open";
"editor.unusualLineTerminators" = "auto";
"files.associations" = { };
"intelephense.environment.phpVersion" = "8.1.0";
"git.useEditorAsCommitInput" = false;
"editor.inlineSuggest.enabled" = true;
"[xml]" = {
"editor.defaultFormatter" = "redhat.vscode-xml";
};
"terminal.integrated.fontSize" = lib.mkForce 18;
"explorer.confirmDragAndDrop" = false;
"editor.unicodeHighlight.nonBasicASCII" = false;
"markdown-preview-enhanced.previewTheme" = "github-dark.css";
"window.commandCenter" = false;
"workbench.editor.editorActionsLocation" = "hidden";
"workbench.layoutControl.enabled" = false;
"editor.minimap.enabled" = false;
"workbench.activityBar.location" = "hidden";
"editor.fontFamily" = lib.mkForce "'Fira Code Retina'";
"editor.fontLigatures" = true;
"keyboard.dispatch" = "keyCode";
"workbench.iconTheme" = "catppuccin-frappe";
"search.useIgnoreFiles" = false;
"search.exclude" = {
# Hide everything in /vendor; except the "laravel" and "livewire" folder.
"**/vendor/{[^l];?[^ai]}*" = true;
# Hide everything in /public; except "index.php"
"**/public/{[^i];?[^n]}*" = true;
"**/node_modules" = true;
"**/dist" = true;
"**/_ide_helper.php" = true;
"**/composer.lock" = true;
"**/package-lock.json" = true;
"storage" = true;
".phpunit.result.cache" = true;
};
"scm.diffDecorations" = "none";
"editor.hover.enabled" = false;
"editor.matchBrackets" = "never";
"workbench.tips.enabled" = false;
"editor.colorDecorators" = false;
"git.decorations.enabled" = false;
"workbench.startupEditor" = "none";
"editor.lightbulb.enabled" = "off";
"editor.selectionHighlight" = false;
"editor.overviewRulerBorder" = false;
"editor.renderLineHighlight" = "none";
"editor.occurrencesHighlight" = "off";
"problems.decorations.enabled" = false;
"editor.renderControlCharacters" = false;
"editor.hideCursorInOverviewRuler" = true;
"editor.gotoLocation.multipleReferences" = "goto";
"editor.gotoLocation.multipleDefinitions" = "goto";
"editor.gotoLocation.multipleDeclarations" = "goto";
"workbench.editor.enablePreviewFromQuickOpen" = false;
"editor.gotoLocation.multipleImplementations" = "goto";
"editor.gotoLocation.multipleTypeDefinitions" = "goto";
"editor.cursorSurroundingLines" = 200;
"workbench.editor.pinnedTabsOnSeparateRow" = true;
"C_Cpp.default.compileCommands" = "\${workspaceFolder}/build/compile_commands.json";
"C_Cpp.default.configurationProvider" = "ms-vscode.cmake-tools";
"window.menuBarVisibility" = "compact";
"vim.leader" = "<space>";
"vim.normalModeKeyBindings" = [
{
"before" = [
"g"
"r"
];
"commands" = [ "editor.action.goToReferences" ];
}
{
"before" = [
"g"
"v"
];
"commands" = [ "editor.action.revealDefinitionAside" ];
}
{
"before" = [
"<leader>"
"o"
];
"commands" = [ "workbench.action.quickOpen" ];
}
{
"before" = [
"<leader>"
"p"
];
"commands" = [ "workbench.action.showCommands" ];
}
{
"before" = [
"<leader>"
"i"
];
"commands" = [ "workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup" ];
}
];
"vim.insertModeKeyBindings" = [
{
"before" = [
"j"
"j"
];
"after" = [ "<Esc>" ];
}
];
"vim.visualModeKeyBindings" = [
{
"before" = [ "<Enter>" ];
"after" = [ "<Esc>" ];
}
];
"workbench.editor.showTabs" = "none";
"ansible.lightspeed.enabled" = false;
"ansible.lightspeed.suggestions.enabled" = false;
"[sql]" = {
"editor.formatOnSave" = false;
};
"svelte.enable-ts-plugin" = true;
"workbench.sideBar.location" = "right";
"workbench.panel.defaultLocation" = "right";
"zig.zls.enabled" = "on";
"zig.path" = "${zigpkg}/bin/zig";
"zig.zls.path" = "${pkgs.zls}/bin/zls";
"zig.zls.zigLibPath" = "${zigpkg}/lib";
"zig.zls.completionLabelDetails" = false;
"zig.zls.enableArgumentPlaceholders" = false;
"zig.zls.inlayHintsShowParameterName" = false;
"zig.zls.inlayHintsShowVariableTypeHints" = false;
};
# Keybindings
keybindings = [
{
"key" = "ctrl+k";
"command" = "git.commitAll";
"when" = "!inDebugMode && !terminalFocus";
}
{
"key" = "ctrl+shift+k";
"command" = "git.pushTo";
"when" = "!inDebugMode && !terminalFocus";
}
{
"key" = "ctrl+shift+n";
"command" = "workbench.action.quickOpen";
}
{
"key" = "shift+escape";
"command" = "workbench.action.terminal.toggleTerminal";
}
{
"key" = "ctrl+shift+`";
"command" = "workbench.action.closeAllEditors";
}
{
"key" = "ctrl+shift+1";
"command" = "workbench.files.action.collapseExplorerFolders";
}
{
"key" = "ctrl+shift+e";
"command" = "workbench.view.explorer";
}
{
"key" = "ctrl+shift+e";
"command" = "workbench.action.toggleSidebarVisibility";
"when" = "!editorFocus";
}
{
"key" = "ctrl+1";
"command" = "workbench.action.toggleSidebarVisibility";
}
{
"key" = "ctrl+a";
"command" = "explorer.newFile";
"when" = "explorerViewletVisible && filesExplorerFocus && !inputFocus";
}
{
"key" = "ctrl+shift+a";
"command" = "explorer.newFolder";
"when" = "explorerViewletVisible && filesExplorerFocus && !inputFocus";
}
{
"key" = "ctrl+d";
"command" = "deleteFile";
"when" = "explorerViewletVisible && filesExplorerFocus && !inputFocus";
}
{
"key" = "ctrl+\\";
"command" = "workbench.action.splitEditorRight";
"when" = "editorFocus";
}
{
"key" = "ctrl+h";
"command" = "workbench.action.navigateLeft";
"when" = "editorFocus";
}
{
"key" = "ctrl+l";
"command" = "workbench.action.navigateRight";
"when" = "editorFocus";
}
{
"key" = "ctrl+*";
"command" = "workbench.action.increaseViewSize";
"when" = "editorFocus";
}
{
"key" = "ctrl+/";
"command" = "workbench.action.decreaseViewSize";
"when" = "editorFocus";
}
{
"key" = "ctrl+shift+w";
"command" = "workbench.action.joinAllGroups";
"when" = "editorFocus";
}
{
"key" = "ctrl+shift+alt+p";
"command" = "editor.emmet.action.wrapWithAbbreviation";
"when" = "editorTextFocus";
}
{
"key" = "ctrl+shift+alt+i";
"command" = "editor.emmet.action.balanceIn";
"when" = "editorTextFocus";
}
{
"key" = "ctrl+shift+alt+o";
"command" = "editor.emmet.action.balanceOut";
"when" = "editorTextFocus";
}
{
"key" = "alt+n";
"command" = "workbench.action.quickOpenSelectNext";
"when" = "inQuickOpen";
}
{
"key" = "alt+p";
"command" = "workbench.action.quickOpenSelectPrevious";
"when" = "inQuickOpen";
}
{
"key" = "alt+0";
"command" = "workbench.action.closeQuickOpen";
"when" = "inQuickOpen";
}
{
"key" = "ctrl+shift+\\";
"command" = "workbench.action.toggleAuxiliaryBar";
}
];
};
}

View File

@ -14,6 +14,7 @@
./common/starship.nix
./common/yazi.nix
./common/fzf.nix
./common/vscode.nix
./hyprland
];
@ -26,7 +27,6 @@
# package = pkgs.papirus-icon-theme;
# };
# };
home = {
username = "javi";
homeDirectory = "/home/javi";
@ -34,6 +34,10 @@
packages = with pkgs; [
# Basics
quickshell
zoom-us
obsidian
kdePackages.kdenlive
ffmpeg
# Terminal tools
ripgrep
@ -49,6 +53,7 @@
claude-code
xsel
nss.tools
ansible
# System tools
btop
@ -64,6 +69,7 @@
go
nodejs_22
bun
zls # Zig language server
];
sessionVariables = {
@ -77,6 +83,7 @@
XDG_CONFIG_HOME = "${config.home.homeDirectory}/.config";
XDG_DATA_HOME = "${config.home.homeDirectory}/.local/share";
XDG_STATE_HOME = "${config.home.homeDirectory}/.local/state";
QT_QPA_PLATFORM = "wayland";
};
};
@ -85,6 +92,11 @@
btop = {
enable = true;
};
direnv = {
enable = true;
enableZshIntegration = true;
};
};
stylix = {

View File

@ -55,14 +55,15 @@
"$mod, SPACE, exec, wofi --show drun"
"$mod, d, exec, ${pkgs.wofi-emoji}/bin/wofi-emoji"
"$mod SHIFT, s, exec, hyprshot --mode region"
"$mod SHIFT, s, exec, flameshot gui"
", PRINT, exec, hyprshot --mode output"
"$mod SHIFT, c, togglespecialworkspace, comms"
"$mod SHIFT, a, togglespecialworkspace, research"
"$mod SHIFT ALT, x, exec, hyprctl dispatch exit"
"SHIFT, Print, exec, grimblast copy area"
"CTRL, Print, exec, grimblast copy active"
"$mod SHIFT ALT, l, exec, hyprlock"
# "SHIFT, Print, exec, grimblast copy area"
# "CTRL, Print, exec, grimblast copy active"
]
++ (
# workspaces

View File

@ -10,8 +10,10 @@
./binds.nix
./hyprpaper.nix
./hyprpanel.nix
./hyprlock.nix
./wofi.nix
./desktop-env.nix
./screenshots.nix
];
home = {
@ -22,16 +24,9 @@
packages = with pkgs; [
# Notifications
libnotify
# Screenshots
grim
slurp
wl-clipboard
hyprshot
# Desktop env
hyprpanel
hyprpolkitagent
# Utility
wl-clipboard
];
@ -104,6 +99,8 @@
exec-once = [
# "quickshell -c hyprshell"
"hyprpanel"
"hypridle"
"systemctl --user start hyprpolkitagent"
];
};

View File

@ -0,0 +1,87 @@
{
inputs,
assets,
lib,
...
}:
{
programs.hyprlock = {
enable = true;
settings = {
# Variables
"$font" = "Monospace";
general = {
hide_cursor = false;
};
animations = {
enabled = true;
bezier = "linear, 1, 1, 0, 0";
animation = [
"fadeIn, 1, 5, linear"
"fadeOut, 1, 5, linear"
"inputFieldDots, 1, 2, linear"
];
};
background = lib.mkForce [
{
monitor = "";
path = "/etc/lockscreen.png";
blur_passes = 1;
}
];
# input-field = [
# {
# monitor = "";
# size = "20%, 5%";
# fade_on_empty = false;
# rounding = 15;
# font_family = "$font";
# placeholder_text = "Input password...";
# fail_text = "$PAMFAIL";
# # Uncomment to use a letter instead of a dot to indicate the typed password
# # dots_text_format = "*";
# # dots_size = 0.4;
# dots_spacing = 0.3;
# # Uncomment to use an input indicator that does not show the password length
# # hide_input = true;
# position = "0, -20";
# halign = "center";
# valign = "center";
# }
# ];
# Labels are defined as a list since there are multiple
label = [
# TIME
{
monitor = "";
text = "$TIME"; # ref. https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/#variable-substitution
font_size = 90;
font_family = "$font";
position = "-30, 0";
halign = "right";
valign = "top";
}
# DATE
{
monitor = "";
text = ''cmd[update:60000] date +"%A, %d %B %Y"''; # update every 60 seconds
font_size = 25;
font_family = "$font";
position = "-30, -150";
halign = "right";
valign = "top";
}
];
};
};
stylix.targets.hyprlock = {
useWallpaper = true;
};
}

View File

@ -0,0 +1,20 @@
{
config,
pkgs,
inputs,
...
}:
{
nixpkgs.config.packageOverrides = pkgs: {
flameshot = pkgs.flameshot.override {
enableWlrSupport = true;
};
};
home.packages = with pkgs; [
flameshot
grim
slurp
];
}

View File

@ -13,6 +13,7 @@ in
environment = {
etc = {
"sddm-wallpaper.png".source = "${assets}/sddm-background.png";
"lockscreen.png".source = "${assets}/lockscreen.png";
"gtk-3.0/settings.ini".text = ''
[Settings]
gtk-icon-theme-name=Papirus

View File

@ -1,4 +1,4 @@
{ ... }:
{ pkgs, ... }:
{
# Install Steam
@ -8,4 +8,15 @@
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
};
environment.systemPackages = with pkgs; [
gamemode
];
# In your configuration.nix
hardware.opengl = {
enable = true;
};
services.xserver.videoDrivers = [ "nvidia" ];
}

View File

@ -7,10 +7,11 @@ let
"backups"
"container-data"
"javi"
"xrandr"
];
configureShare = share: {
name = "/mnt/${share}";
name = "/home/javi/network-shares/${share}";
value = {
device = "${nasIp}:${baseMnt}/${share}";
fsType = "nfs";
@ -19,11 +20,6 @@ let
"noauto"
"rw"
"vers=4"
# make Nautilus/Dolphin/Any File Manager show it with a friendly name/icon
"x-gvfs-show"
"x-gvfs-name=NAS ${share}"
"x-gvfs-icon=network-server"
];
};
};

View File

@ -11,18 +11,7 @@
lib,
...
}:
let
customCaddy = pkgs.xcaddy {
pname = "caddy-frankenphp";
version = "2.7.6";
subPackages = [ "cmd/caddy" ];
plugins = [
"github.com/dunglas/frankenphp/caddy"
];
};
in
{
services = {
# Enable dnsmasq
@ -47,44 +36,92 @@ in
};
# Enable PHP-FPM
phpfpm = {
pools.www = {
user = "javi";
group = "users";
settings = {
"listen.owner" = "javi";
"listen.group" = "users";
"listen.mode" = "0660";
"pm" = "dynamic";
"pm.max_children" = 32;
"pm.start_servers" = 2;
"pm.min_spare_servers" = 2;
"pm.max_spare_servers" = 4;
"pm.max_requests" = 500;
};
phpEnv."PATH" = lib.makeBinPath [ pkgs.php ];
};
};
# phpfpm = {
# pools.www = {
# user = "javi";
# group = "users";
# settings = {
# "listen.owner" = "javi";
# "listen.group" = "users";
# "listen.mode" = "0660";
# "pm" = "dynamic";
# "pm.max_children" = 32;
# "pm.start_servers" = 2;
# "pm.min_spare_servers" = 2;
# "pm.max_spare_servers" = 4;
# "pm.max_requests" = 500;
# };
# phpEnv."PATH" = lib.makeBinPath [ pkgs.php ];
# };
# };
# Enable Caddy
caddy = {
enable = true;
package = customCaddy;
package = pkgs.frankenphp;
globalConfig = ''
auto_https off
frankenphp
debug
order php_server before file_server
'';
/*
WORKING CONFIG
map {host} {pname} {
~^(.+)\.test$ $1
default "unknown"
}
root * /home/javi/projects/{pname}/public
# Add file server directive with browse enabled for debugging
file_server browse
# Or for PHP apps, add try_files
try_files {path} {path}/ /index.php?{query}
php_server
*/
extraConfig = ''
# Specific subdomain first (more specific routes come first)
http://caddytest.test {
respond "We in caddyland"
respond "fuck"
}
# Wildcard for other .test domains
http://*.test {
root * /home/javi/projects/{labels.1}/public
http://*.test, http://*.*.test {
map {host} {project_dir} {
~^(.+)\.test$ $1
default "unknown"
}
vars base_path "/home/javi/projects/{project_dir}"
@laravel file {
root {vars.base_path}/public
try_files index.php
}
@jigsaw file {
root {vars.base_path}/build_local
try_files index.html
}
handle @laravel {
root * {vars.base_path}/public
php_server
file_server
try_files {path} {path}/ /index.php?{query}
}
handle @jigsaw {
root * {vars.base_path}/build_local
try_files {path} {path}/ /index.html
file_server
}
handle {
respond "Unknown project type"
}
}
'';
};
@ -132,6 +169,11 @@ in
serviceConfig = {
User = lib.mkForce "javi";
Group = lib.mkForce "users";
ProtectHome = lib.mkForce false; # This is key!
ProtectSystem = lib.mkForce false;
PrivateTmp = lib.mkForce false;
# More comprehensive capabilities
AmbientCapabilities = [
"CAP_NET_BIND_SERVICE"