Compare commits

..

7 Commits

Author SHA1 Message Date
m3tam3re
8f4b39d277 flake update 2025-10-05 14:38:50 +02:00
m3tam3re
dea4ca9377 added ports module from m3ta-nixpkgs / prep for rewrite 2025-10-05 12:24:27 +02:00
m3tam3re
6cd1fdd651 beginning of bigger restructure, m3ta-nixpkgs input 2025-10-03 19:14:37 +02:00
m3tam3re
b66553888b beginning of bigger restructure, m3ta-nixpkgs input 2025-10-03 14:55:24 +02:00
m3tam3re
35becfdea4 +crush 2025-09-29 18:58:19 +02:00
m3tam3re
b2ad6005bc +hyprland cfg 2025-09-15 18:11:00 +02:00
m3tam3re
150dd20d32 +gamemoderun 2025-09-14 16:58:40 +02:00
47 changed files with 406 additions and 932 deletions

232
flake.lock generated
View File

@@ -37,6 +37,28 @@
"type": "github" "type": "github"
} }
}, },
"blueprint": {
"inputs": {
"nixpkgs": [
"nix-ai-tools",
"nixpkgs"
],
"systems": "systems_3"
},
"locked": {
"lastModified": 1758687491,
"narHash": "sha256-sy8Q+MfBe+MZzYj4MJwBDe4lkLnmhy1POO86hWZgqO8=",
"owner": "numtide",
"repo": "blueprint",
"rev": "7ecaeb70f63d14a397c73b38f57177894bb795c8",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "blueprint",
"type": "github"
}
},
"darwin": { "darwin": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -66,11 +88,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1756733629, "lastModified": 1758287904,
"narHash": "sha256-dwWGlDhcO5SMIvMSTB4mjQ5Pvo2vtxvpIknhVnSz2I8=", "narHash": "sha256-IGmaEf3Do8o5Cwp1kXBN1wQmZwQN3NLfq5t4nHtVtcU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "a5c4f2ab72e3d1ab43e3e65aa421c6f2bd2e12a1", "rev": "67ff9807dd148e704baadbd4fd783b54282ca627",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -79,20 +101,25 @@
"type": "github" "type": "github"
} }
}, },
"dotfiles": { "flake-parts": {
"flake": false, "inputs": {
"nixpkgs-lib": [
"nur",
"nixpkgs"
]
},
"locked": { "locked": {
"lastModified": 1728910889, "lastModified": 1733312601,
"narHash": "sha256-B/fb+7SKVxK9j851SgR4Nljd6EtE1DzqwLh6yOvkQOY=", "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
"ref": "refs/heads/master", "owner": "hercules-ci",
"rev": "360c75b2cbce800ebaf9445266e2fe345bf582bf", "repo": "flake-parts",
"revCount": 53, "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
"type": "git", "type": "github"
"url": "https://code.m3tam3re.com/m3tam3re/dotfiles.git"
}, },
"original": { "original": {
"type": "git", "owner": "hercules-ci",
"url": "https://code.m3tam3re.com/m3tam3re/dotfiles.git" "repo": "flake-parts",
"type": "github"
} }
}, },
"flake-utils": { "flake-utils": {
@@ -141,11 +168,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1756954499, "lastModified": 1759573136,
"narHash": "sha256-Pg4xBHzvzNY8l9x/rLWoJMnIR8ebG+xeU+IyqThIkqU=", "narHash": "sha256-ILSPD0Dm8p0w0fCVzOx98ZH8yFDrR75GmwmH3fS2VnE=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "ed1a98c375450dfccf427adacd2bfd1a7b22eb25", "rev": "5f06ceafc6c9b773a776b9195c3f47bbe1defa43",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -181,7 +208,7 @@
"rose-pine-hyprcursor", "rose-pine-hyprcursor",
"nixpkgs" "nixpkgs"
], ],
"systems": "systems_3" "systems": "systems_4"
}, },
"locked": { "locked": {
"lastModified": 1709914708, "lastModified": 1709914708,
@@ -204,11 +231,11 @@
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1755569534, "lastModified": 1757563845,
"narHash": "sha256-ukXfV1cAsxoar0IVEO2/s3qnVEZpZf0wvqE3PIESobw=", "narHash": "sha256-pz69vejsrB+7N+jyKxZcckTjJtzw9BCAIRzHNbFUIp0=",
"owner": "Jas-SinghFSU", "owner": "Jas-SinghFSU",
"repo": "HyprPanel", "repo": "HyprPanel",
"rev": "6385f2e15df908e0c13bed800f4b091300e5b981", "rev": "0a961ce8a959c521f41546af7f355e04adee5503",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -217,6 +244,44 @@
"type": "github" "type": "github"
} }
}, },
"m3ta-nixpkgs": {
"inputs": {
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1759661061,
"narHash": "sha256-LAd1fNNIL19HrOm1cVeoKP5v8si932HsX1ZDwJh9O8o=",
"ref": "refs/heads/master",
"rev": "27d92a238ba9b9df117680c2080e082a2732bfc5",
"revCount": 7,
"type": "git",
"url": "https://code.m3ta.dev/m3tam3re/nixpkgs"
},
"original": {
"type": "git",
"url": "https://code.m3ta.dev/m3tam3re/nixpkgs"
}
},
"nix-ai-tools": {
"inputs": {
"blueprint": "blueprint",
"nixpkgs": "nixpkgs_4",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1759662326,
"narHash": "sha256-DlLJ95u+Y+dQUgYXK9w4+oXEN1tAoBTuOBbROkJFw5Y=",
"owner": "numtide",
"repo": "nix-ai-tools",
"rev": "f9b693bea48cea1dbe1f1b4471f546fe1e7a0c29",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "nix-ai-tools",
"type": "github"
}
},
"nix-colors": { "nix-colors": {
"inputs": { "inputs": {
"base16-schemes": "base16-schemes", "base16-schemes": "base16-schemes",
@@ -254,7 +319,7 @@
"nixos-generators": { "nixos-generators": {
"inputs": { "inputs": {
"nixlib": "nixlib", "nixlib": "nixlib",
"nixpkgs": "nixpkgs_3" "nixpkgs": "nixpkgs_5"
}, },
"locked": { "locked": {
"lastModified": 1751903740, "lastModified": 1751903740,
@@ -351,11 +416,11 @@
}, },
"nixpkgs-master": { "nixpkgs-master": {
"locked": { "locked": {
"lastModified": 1756989853, "lastModified": 1759661032,
"narHash": "sha256-LNImTVLmG6VhYLNWGF48f7ZI9gbtCCEGa2yzMaOA3dI=", "narHash": "sha256-cqZAN2FmnUX/M42m1T9/glzcp8C+66bV/25xUB7TbAw=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "52c8b991706f32f5cbf055e1cf7d6e8593867abb", "rev": "b7ffd1a8c2550781d74d6a2b48dc6bcd9da29996",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -367,11 +432,11 @@
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1756886854, "lastModified": 1759580034,
"narHash": "sha256-6tooT142NLcFjt24Gi4B0G1pgWLvfw7y93sYEfSHlLI=", "narHash": "sha256-YWo57PL7mGZU7D4WeKFMiW4ex/O6ZolUS6UNBHTZfkI=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "0e6684e6c5755325f801bda1751a8a4038145d7d", "rev": "3bcc93c5f7a4b30335d31f21e2f1281cba68c318",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -398,6 +463,38 @@
} }
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": {
"lastModified": 1759381078,
"narHash": "sha256-gTrEEp5gEspIcCOx9PD8kMaF1iEmfBcTbO0Jag2QhQs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "7df7ff7d8e00218376575f0acdcc5d66741351ee",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1759381078,
"narHash": "sha256-gTrEEp5gEspIcCOx9PD8kMaF1iEmfBcTbO0Jag2QhQs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "7df7ff7d8e00218376575f0acdcc5d66741351ee",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1736657626, "lastModified": 1736657626,
"narHash": "sha256-FWlPMUzp0lkQBdhKlPqtQdqmp+/C+1MBiEytaYfrCTY=", "narHash": "sha256-FWlPMUzp0lkQBdhKlPqtQdqmp+/C+1MBiEytaYfrCTY=",
@@ -413,13 +510,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_4": { "nixpkgs_6": {
"locked": { "locked": {
"lastModified": 1756787288, "lastModified": 1759381078,
"narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", "narHash": "sha256-gTrEEp5gEspIcCOx9PD8kMaF1iEmfBcTbO0Jag2QhQs=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", "rev": "7df7ff7d8e00218376575f0acdcc5d66741351ee",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -429,7 +526,7 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_5": { "nixpkgs_7": {
"locked": { "locked": {
"lastModified": 1710272261, "lastModified": 1710272261,
"narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=", "narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=",
@@ -445,28 +542,51 @@
"type": "github" "type": "github"
} }
}, },
"nur": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1759659817,
"narHash": "sha256-S26D4k/9He1tLCn5ARx+3BNzK7IKBLBJWUqx9GF8X7s=",
"owner": "nix-community",
"repo": "NUR",
"rev": "df8713776e7e236129f7c260017e770393b4f278",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"agenix": "agenix", "agenix": "agenix",
"disko": "disko", "disko": "disko",
"dotfiles": "dotfiles",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"hyprpanel": "hyprpanel", "hyprpanel": "hyprpanel",
"m3ta-nixpkgs": "m3ta-nixpkgs",
"nix-ai-tools": "nix-ai-tools",
"nix-colors": "nix-colors", "nix-colors": "nix-colors",
"nixos-generators": "nixos-generators", "nixos-generators": "nixos-generators",
"nixpkgs": "nixpkgs_4", "nixpkgs": "nixpkgs_6",
"nixpkgs-45570c2": "nixpkgs-45570c2", "nixpkgs-45570c2": "nixpkgs-45570c2",
"nixpkgs-9e58ed7": "nixpkgs-9e58ed7", "nixpkgs-9e58ed7": "nixpkgs-9e58ed7",
"nixpkgs-locked": "nixpkgs-locked", "nixpkgs-locked": "nixpkgs-locked",
"nixpkgs-master": "nixpkgs-master", "nixpkgs-master": "nixpkgs-master",
"nixpkgs-stable": "nixpkgs-stable", "nixpkgs-stable": "nixpkgs-stable",
"nur": "nur",
"rose-pine-hyprcursor": "rose-pine-hyprcursor" "rose-pine-hyprcursor": "rose-pine-hyprcursor"
} }
}, },
"rose-pine-hyprcursor": { "rose-pine-hyprcursor": {
"inputs": { "inputs": {
"hyprlang": "hyprlang", "hyprlang": "hyprlang",
"nixpkgs": "nixpkgs_5", "nixpkgs": "nixpkgs_7",
"utils": "utils" "utils": "utils"
}, },
"locked": { "locked": {
@@ -514,6 +634,21 @@
} }
}, },
"systems_3": { "systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_4": {
"locked": { "locked": {
"lastModified": 1689347949, "lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
@@ -528,7 +663,7 @@
"type": "github" "type": "github"
} }
}, },
"systems_4": { "systems_5": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@@ -543,9 +678,30 @@
"type": "github" "type": "github"
} }
}, },
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"nix-ai-tools",
"nixpkgs"
]
},
"locked": {
"lastModified": 1758728421,
"narHash": "sha256-ySNJ008muQAds2JemiyrWYbwbG+V7S5wg3ZVKGHSFu8=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "5eda4ee8121f97b218f7cc73f5172098d458f1d1",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"utils": { "utils": {
"inputs": { "inputs": {
"systems": "systems_4" "systems": "systems_5"
}, },
"locked": { "locked": {
"lastModified": 1710146030, "lastModified": 1710146030,

View File

@@ -22,6 +22,13 @@
nixpkgs-9e58ed7.url = "github:nixos/nixpkgs/9e58ed7ba759d81c98f033b7f5eba21ca68f53b0"; nixpkgs-9e58ed7.url = "github:nixos/nixpkgs/9e58ed7ba759d81c98f033b7f5eba21ca68f53b0";
nixpkgs-master.url = "github:nixos/nixpkgs/master"; nixpkgs-master.url = "github:nixos/nixpkgs/master";
m3ta-nixpkgs.url = "git+https://code.m3ta.dev/m3tam3re/nixpkgs";
# m3ta-nixpkgs.url = "path:/home/m3tam3re/p/nix/nixpkgs";
#
nur = {
url = "github:nix-community/NUR";
inputs.nixpkgs.follows = "nixpkgs";
};
agenix.url = "github:ryantm/agenix"; agenix.url = "github:ryantm/agenix";
disko = { disko = {
@@ -36,19 +43,16 @@
hyprpanel.url = "github:Jas-SinghFSU/HyprPanel"; hyprpanel.url = "github:Jas-SinghFSU/HyprPanel";
rose-pine-hyprcursor.url = "github:ndom91/rose-pine-hyprcursor"; rose-pine-hyprcursor.url = "github:ndom91/rose-pine-hyprcursor";
nix-colors.url = "github:misterio77/nix-colors"; nix-colors.url = "github:misterio77/nix-colors";
nix-ai-tools.url = "github:numtide/nix-ai-tools";
dotfiles = {
url = "git+https://code.m3tam3re.com/m3tam3re/dotfiles.git";
flake = false;
};
}; };
outputs = { outputs = {
self, self,
agenix, agenix,
dotfiles,
home-manager, home-manager,
nixpkgs, nixpkgs,
m3ta-nixpkgs,
nur,
... ...
} @ inputs: let } @ inputs: let
inherit (self) outputs; inherit (self) outputs;
@@ -61,28 +65,8 @@
]; ];
forAllSystems = nixpkgs.lib.genAttrs systems; forAllSystems = nixpkgs.lib.genAttrs systems;
in { in {
packages = let packages =
# Import the regular packages for all systems forAllSystems (system: import ./pkgs nixpkgs.legacyPackages.${system});
regularPkgs = forAllSystems (
system:
import ./pkgs nixpkgs.legacyPackages.${system}
);
in
regularPkgs
// {
x86_64-linux =
regularPkgs.x86_64-linux
// {
# Build a QEMU image compatible with Proxmox using nixos-generators
proxmox-hermes-image = inputs.nixos-generators.nixosGenerate {
system = "x86_64-linux";
format = "proxmox";
modules = [
./hosts/m3-hermes/default.nix
];
};
};
};
overlays = import ./overlays {inherit inputs outputs;}; overlays = import ./overlays {inherit inputs outputs;};
homeManagerModules = import ./modules/home-manager; homeManagerModules = import ./modules/home-manager;
@@ -95,6 +79,7 @@
modules = [ modules = [
./hosts/m3-ares ./hosts/m3-ares
agenix.nixosModules.default agenix.nixosModules.default
m3ta-nixpkgs.nixosModules.default
]; ];
}; };
m3-atlas = nixpkgs.lib.nixosSystem { m3-atlas = nixpkgs.lib.nixosSystem {
@@ -104,6 +89,7 @@
./hosts/m3-atlas ./hosts/m3-atlas
inputs.disko.nixosModules.disko inputs.disko.nixosModules.disko
agenix.nixosModules.default agenix.nixosModules.default
m3ta-nixpkgs.nixosModules.default
]; ];
}; };
m3-kratos = nixpkgs.lib.nixosSystem { m3-kratos = nixpkgs.lib.nixosSystem {
@@ -114,6 +100,8 @@
modules = [ modules = [
./hosts/m3-kratos ./hosts/m3-kratos
agenix.nixosModules.default agenix.nixosModules.default
nur.modules.nixos.default
m3ta-nixpkgs.nixosModules.default
]; ];
}; };
m3-helios = nixpkgs.lib.nixosSystem { m3-helios = nixpkgs.lib.nixosSystem {
@@ -123,6 +111,7 @@
./hosts/m3-helios ./hosts/m3-helios
inputs.disko.nixosModules.disko inputs.disko.nixosModules.disko
agenix.nixosModules.default agenix.nixosModules.default
m3ta-nixpkgs.nixosModules.default
]; ];
}; };
}; };

View File

@@ -6,22 +6,25 @@
... ...
}: { }: {
imports = [ imports = [
(import
../../modules/home-manager/zellij-ps.nix)
inputs.nix-colors.homeManagerModules.default inputs.nix-colors.homeManagerModules.default
inputs.m3ta-nixpkgs.homeManagerModules.default
]; #imports = builtins.attrValues outputs.homeManagerModules; ]; #imports = builtins.attrValues outputs.homeManagerModules;
nixpkgs = { nixpkgs = {
# You can add overlays here # You can add overlays here
overlays = [ overlays = [
# Add overlays your own flake exports (from overlays and pkgs dir): # Add overlays your own flake exports (from overlays and pkgs dir):
outputs.overlays.additions #outputs.overlays.additions
outputs.overlays.modifications #outputs.overlays.modifications
outputs.overlays.temp-packages outputs.overlays.temp-packages
outputs.overlays.stable-packages outputs.overlays.stable-packages
outputs.overlays.locked-packages outputs.overlays.locked-packages
outputs.overlays.pinned-packages outputs.overlays.pinned-packages
outputs.overlays.master-packages outputs.overlays.master-packages
inputs.nur.overlays.default
inputs.m3ta-nixpkgs.overlays.default
inputs.m3ta-nixpkgs.overlays.modifications
# You can also add overlays exported from other flakes: # You can also add overlays exported from other flakes:
# neovim-nightly-overlay.overlays.default # neovim-nightly-overlay.overlays.default
@@ -48,4 +51,5 @@
warn-dirty = false; warn-dirty = false;
}; };
}; };
colorScheme = inputs.nix-colors.colorSchemes.dracula;
} }

View File

@@ -26,16 +26,6 @@
enableNushellIntegration = true; enableNushellIntegration = true;
}; };
programs.neovim = {
enable = true;
defaultEditor = true;
viAlias = true;
vimAlias = true;
vimdiffAlias = true;
withNodeJs = true;
withPython3 = true;
};
programs.bat = { programs.bat = {
enable = true; enable = true;
config = { config = {
@@ -193,6 +183,11 @@
}; };
}; };
cli.zellij-ps = {
enable = true;
projectFolders = ["/home/m3tam3re/p"];
};
home.packages = with pkgs; [ home.packages = with pkgs; [
agenix-cli agenix-cli
alejandra alejandra

View File

@@ -3,6 +3,7 @@
devpod devpod
#devpod-desktop #devpod-desktop
code2prompt code2prompt
nur.repos.charmbracelet.crush
(python3.withPackages (ps: (python3.withPackages (ps:
with ps; [ with ps; [
pip pip

View File

@@ -15,122 +15,9 @@ in {
bruno bruno
insomnia insomnia
]; ];
coding.editors = {
programs.zed-editor = { neovim.enable = true;
enable = true; zed.enable = true;
userSettings = {
features = {
inline_prediction_provider = "zed";
edit_prediction_provider = "zed";
copilot = false;
};
telemetry = {
metrics = false;
};
lsp = {
rust_analyzer = {
binary = {path_lookup = true;};
};
};
languages = {
Nix = {
language_servers = ["nixd"];
formatter = {
external = {
command = "alejandra";
arguments = ["-q" "-"];
};
};
};
Python = {
language_servers = ["pyrefly"];
formatter = {
external = {
command = "black";
arguments = ["-"];
};
};
};
};
lsp = {
"pyrefly" = {
command = {
path = "pyrefly";
args = ["--lsp"];
env = {};
};
settings = {};
};
};
context_servers = {
"some-context-server" = {
command = {
path = "some-command";
args = ["arg-1" "arg-2"];
env = {};
};
settings = {};
};
};
assistant = {
version = "2";
default_model = {
provider = "anthropic";
model = "Claude 3.7 Sonnet";
};
};
language_models = {
anthropic = {
version = "1";
api_url = "https://api.anthropic.com";
};
openai = {
version = "1";
api_url = "https://api.openai.com/v1";
};
ollama = {
api_url = "http://localhost:11434";
};
};
ssh_connections = [
{
host = "152.53.85.162";
nickname = "m3-atlas";
args = ["-i" "~/.ssh/m3tam3re"];
}
{
host = "95.217.189.186";
port = 2222;
nickname = "self-host-playbook";
args = ["-i" "~/.ssh/self-host-playbook"];
"projects" = [
{
paths = ["/etc/nixos/current-systemconfig"];
}
];
}
{
host = "192.168.1.152";
port = 22;
nickname = "m3-daedalus";
args = ["-i" "~/.ssh/m3tam3re"];
"projects" = [
{
paths = ["/home/m3tam3re/home-config"];
}
];
}
];
auto_update = false;
format_on_save = "on";
vim_mode = true;
load_direnv = "shell_hook";
theme = "Dracula";
buffer_font_family = "FiraCode Nerd Font";
ui_font_size = 16;
buffer_font_size = 16;
show_edit_predictions = true;
};
}; };
}; };
} }

View File

@@ -143,8 +143,6 @@
# gsettings-desktop-schemas # gsettings-desktop-schemas
# graphviz # graphviz
# ksnip # ksnip
msty
msty-sidecar
msty-studio msty-studio
nwg-look nwg-look
# pamixer # pamixer

View File

@@ -13,6 +13,7 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = with pkgs; [ home.packages = with pkgs; [
gamescope gamescope
gamemode
goverlay goverlay
mangohud mangohud
protonplus protonplus

View File

@@ -93,10 +93,6 @@ in {
new_status = "master"; new_status = "master";
}; };
gestures = {
workspace_swipe = false;
};
device = [ device = [
{ {
name = "epic-mouse-v1"; name = "epic-mouse-v1";

View File

@@ -1,9 +1,7 @@
{ {
pkgs, pkgs,
inputs,
... ...
}: { }: {
colorScheme = inputs.nix-colors.colorSchemes.dracula;
qt = { qt = {
enable = true; enable = true;
platformTheme.name = "gtk"; platformTheme.name = "gtk";

View File

@@ -1,26 +0,0 @@
{
pkgs,
inputs,
...
}: {
home.file.".config/bat" = {
source = "${inputs.dotfiles}/bat";
recursive = true;
};
home.file.".config/nyxt" = {
source = "${inputs.dotfiles}/nyxt";
recursive = true;
};
# home.file.".config/hypr" = {
# source = "${inputs.dotfiles}/hypr";
# recursive = true;
# };
home.file.".config/nvim" = {
source = "${inputs.dotfiles}/nvim";
recursive = true;
};
home.file.".config/zellij" = {
source = "${inputs.dotfiles}/zellij";
recursive = true;
};
}

View File

@@ -89,27 +89,27 @@
init.defaultBranch = "master"; init.defaultBranch = "master";
}; };
}; };
programs.zellij-ps = { # programs.zellij-ps = {
enable = true; # enable = true;
projectFolders = [ # projectFolders = [
"${config.home.homeDirectory}/p/c" # "${config.home.homeDirectory}/p/c"
"${config.home.homeDirectory}/p" # "${config.home.homeDirectory}/p"
"${config.home.homeDirectory}/.config" # "${config.home.homeDirectory}/.config"
]; # ];
layout = '' # layout = ''
layout { # layout {
pane size=1 borderless=true { # pane size=1 borderless=true {
plugin location="zellij:tab-bar" # plugin location="zellij:tab-bar"
} # }
pane size="70%" command="nvim" # pane size="70%" command="nvim"
pane split_direction="vertical" { # pane split_direction="vertical" {
pane # pane
pane command="unimatrix" # pane command="unimatrix"
} # }
pane size=1 borderless=true { # pane size=1 borderless=true {
plugin location="zellij:status-bar" # plugin location="zellij:status-bar"
} # }
} # }
''; # '';
}; # };
} }

View File

@@ -24,7 +24,6 @@
# The home.packages option allows you to install Nix packages into your # The home.packages option allows you to install Nix packages into your
# environment. # environment.
home.packages = with pkgs; [ home.packages = with pkgs; [
aider-chat-env
libgtop libgtop
# # Adds the 'hello' command to your environment. It prints a friendly # # Adds the 'hello' command to your environment. It prints a friendly
# # "Hello, world!" when run. # # "Hello, world!" when run.
@@ -178,11 +177,6 @@
user = "m3tam3re"; user = "m3tam3re";
identityFile = "~/.ssh/m3tam3re"; identityFile = "~/.ssh/m3tam3re";
}; };
"m3-hermes" = {
hostname = "95.216.214.142";
user = "m3tam3re";
identityFile = "~/.ssh/m3tam3re";
};
"m3-helios" = { "m3-helios" = {
hostname = "192.168.178.210"; hostname = "192.168.178.210";
user = "m3tam3re"; user = "m3tam3re";
@@ -227,27 +221,27 @@
}; };
}; };
}; };
programs.zellij-ps = { # programs.zellij-ps = {
enable = true; # enable = true;
projectFolders = [ # projectFolders = [
"${config.home.homeDirectory}/p/c" # "${config.home.homeDirectory}/p/c"
"${config.home.homeDirectory}/p" # "${config.home.homeDirectory}/p"
"${config.home.homeDirectory}/.config" # "${config.home.homeDirectory}/.config"
]; # ];
layout = '' # layout = ''
layout { # layout {
pane size=1 borderless=true { # pane size=1 borderless=true {
plugin location="zellij:tab-bar" # plugin location="zellij:tab-bar"
} # }
pane size="70%" command="nvim" # pane size="70%" command="nvim"
pane split_direction="vertical" { # pane split_direction="vertical" {
pane # pane
pane command="unimatrix" # pane command="unimatrix"
} # }
pane size=1 borderless=true { # pane size=1 borderless=true {
plugin location="zellij:status-bar" # plugin location="zellij:status-bar"
} # }
} # }
''; # '';
}; # };
} }

View File

@@ -6,12 +6,10 @@
with lib; { with lib; {
imports = [ imports = [
../common ../common
./dotfiles
./home.nix ./home.nix
../features/cli ../features/cli
../features/coding ../features/coding
../features/desktop ../features/desktop
#./services/librechat.nix
]; ];
config = mkMerge [ config = mkMerge [

View File

@@ -8,7 +8,6 @@ with lib; let
in { in {
imports = [ imports = [
../common ../common
./dotfiles
./home.nix ./home.nix
../features/cli ../features/cli
../features/coding ../features/coding

View File

@@ -6,7 +6,6 @@
with lib; { with lib; {
imports = [ imports = [
../common ../common
./dotfiles
./home.nix ./home.nix
../features/cli ../features/cli
../features/coding ../features/coding

View File

@@ -1,18 +0,0 @@
{
systemd.user.services.librechat = {
Unit = {
Description = "LibreChat Start";
After = ["network-online.target"];
Wants = ["network-online.target"];
};
Install = {WantedBy = ["default.target"];};
Service = {
Type = "oneshot";
RemainAfterExit = "yes";
WorkingDirectory = "/home/m3tam3re/p/r/ai/LibreChat";
ExecStart = "/run/current-system/sw/bin/podman-compose up -d";
ExecStop = "/run/current-system/sw/bin/podman-compose down";
Restart = "on-failure";
};
};
}

View File

@@ -8,6 +8,7 @@
}: { }: {
imports = [ imports = [
./extraServices ./extraServices
./ports.nix
./users ./users
inputs.home-manager.nixosModules.home-manager inputs.home-manager.nixosModules.home-manager
]; ];
@@ -25,13 +26,16 @@
# You can add overlays here # You can add overlays here
overlays = [ overlays = [
# Add overlays your own flake exports (from overlays and pkgs dir): # Add overlays your own flake exports (from overlays and pkgs dir):
outputs.overlays.additions #outputs.overlays.additions
outputs.overlays.modifications #outputs.overlays.modifications
outputs.overlays.stable-packages outputs.overlays.stable-packages
outputs.overlays.locked-packages outputs.overlays.locked-packages
outputs.overlays.pinned-packages outputs.overlays.pinned-packages
outputs.overlays.master-packages outputs.overlays.master-packages
inputs.m3ta-nixpkgs.overlays.default
inputs.m3ta-nixpkgs.overlays.modifications
# You can also add overlays exported from other flakes: # You can also add overlays exported from other flakes:
# neovim-nightly-overlay.overlays.default # neovim-nightly-overlay.overlays.default

72
hosts/common/ports.nix Normal file
View File

@@ -0,0 +1,72 @@
{config, ...}: {
m3ta.ports = {
enable = true;
definitions = {
# System services
ssh = 22;
# Web & proxy services
traefik = 80;
traefik-ssl = 443;
# Databases
postgres = 5432;
mysql = 3306;
redis = 6379;
# VPN & networking
wireguard = 51820;
tailscale = 41641;
headscale = 3009;
# Containers & web apps
gitea = 3030;
baserow = 3001;
ghost = 3002;
wastebin = 3003;
littlelink = 3004;
searx = 3005;
restreamer = 3006;
paperless = 3012;
vaultwarden = 3013;
slash = 3010;
slash-nemoti = 3016;
kestra = 3018;
outline = 3019;
pangolin = 3020;
pangolin-api = 3021;
pangolin-ws = 3022;
# Home automation
homarr = 7575;
# DNS
adguardhome = 53;
};
hostOverrides = {
# Host-specific overrides
m3-ares = {
# Any custom port overrides for m3-ares
};
m3-atlas = {
# Any custom port overrides for m3-atlas
};
m3-helios = {
# Any custom port overrides for m3-helios
};
m3-kratos = {
# Any custom port overrides for m3-kratos
};
};
};
environment.etc."info/all-ports.json" = {
text = builtins.toJSON {
hostname = config.networking.hostName;
ports = config.m3ta.ports.all; # TODO should only return actually used ports
};
};
}

View File

@@ -24,14 +24,12 @@
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
boot.loader.systemd-boot.memtest86.enable = true; boot.loader.systemd-boot.memtest86.enable = true;
boot.initrd.services.lvm.enable = false; boot.initrd.services.lvm.enable = false;
boot.extraModulePackages = with config.boot.kernelPackages; [v4l2loopback]; # boot.kernelModules = [];
boot.kernelModules = ["v4l2loopback"];
boot.kernelPackages = pkgs.linuxPackages_latest; boot.kernelPackages = pkgs.linuxPackages_latest;
boot.extraModprobeConfig = '' boot.extraModprobeConfig = ''
options kvm_intel nested=1 options kvm_intel nested=1
options kvm_intel emulate_invalid_guest_state=0 options kvm_intel emulate_invalid_guest_state=0
options kvm ignore_msrs=1 options kvm ignore_msrs=1
options v4l2loopback exclusive_caps=1 max_buffers=2
''; '';
networking.hostName = "m3-ares"; # Define your hostname. networking.hostName = "m3-ares"; # Define your hostname.

View File

@@ -1,4 +1,7 @@
{pkgs, ...}: { {
pkgs,
...
}: {
services.postgresql = { services.postgresql = {
enable = true; enable = true;
package = pkgs.postgresql_17; package = pkgs.postgresql_17;

View File

@@ -1,6 +1,4 @@
{pkgs, ...}: { {
environment.systemPackages = with pkgs; [
];
security.rtkit.enable = true; security.rtkit.enable = true;
services.pipewire = { services.pipewire = {
enable = true; enable = true;

View File

@@ -1,6 +1,6 @@
{config, ...}: { {config, ...}: {
services.tailscale = { services.tailscale = {
enable = true; enable = false;
authKeyFile = config.age.secrets.tailscale-key.path; authKeyFile = config.age.secrets.tailscale-key.path;
useRoutingFeatures = "both"; useRoutingFeatures = "both";
extraUpFlags = [ extraUpFlags = [

View File

@@ -2,7 +2,7 @@
virtualisation.oci-containers.containers."baserow" = { virtualisation.oci-containers.containers."baserow" = {
image = "docker.io/baserow/baserow:1.34.2"; image = "docker.io/baserow/baserow:1.34.2";
environmentFiles = [config.age.secrets.baserow-env.path]; environmentFiles = [config.age.secrets.baserow-env.path];
ports = ["127.0.0.1:3001:80"]; ports = ["127.0.0.1:${toString (config.m3ta.ports.get "baserow")}:80"];
volumes = ["baserow_data:/baserow/data"]; volumes = ["baserow_data:/baserow/data"];
extraOptions = ["--add-host=postgres:10.89.0.1" "--ip=10.89.0.10" "--network=web"]; extraOptions = ["--add-host=postgres:10.89.0.1" "--ip=10.89.0.10" "--network=web"];
}; };
@@ -10,7 +10,7 @@
services.traefik.dynamicConfigOptions.http = { services.traefik.dynamicConfigOptions.http = {
services.baserow.loadBalancer.servers = [ services.baserow.loadBalancer.servers = [
{ {
url = "http://localhost:3001/"; url = "http://localhost:${toString (config.m3ta.ports.get "baserow")}/";
} }
]; ];

View File

@@ -4,7 +4,7 @@
environmentFiles = [config.age.secrets.restreamer-env.path]; environmentFiles = [config.age.secrets.restreamer-env.path];
# Modified ports to include RTMPS # Modified ports to include RTMPS
ports = [ ports = [
"127.0.0.1:3006:8080" # Web UI "127.0.0.1:${toString (config.m3ta.ports.get "restreamer")}:8080" # Web UI
"127.0.0.1:1936:1935" # RTMP "127.0.0.1:1936:1935" # RTMP
]; ];
volumes = [ volumes = [
@@ -20,7 +20,7 @@
http = { http = {
services.restreamer.loadBalancer.servers = [ services.restreamer.loadBalancer.servers = [
{ {
url = "http://localhost:3006/"; url = "http://localhost:${toString (config.m3ta.ports.get "restreamer")}/";
} }
]; ];

View File

@@ -1,10 +1,10 @@
{ {config, ...}: {
services.gitea = { services.gitea = {
enable = true; enable = true;
settings = { settings = {
server = { server = {
ROOT_URL = "https://code.m3ta.dev"; ROOT_URL = "https://code.m3ta.dev";
HTTP_PORT = 3030; HTTP_PORT = config.m3ta.ports.get "gitea";
}; };
mailer.SENDMAIL_PATH = "/run/wrappers/bin/sendmail"; mailer.SENDMAIL_PATH = "/run/wrappers/bin/sendmail";
service.DISABLE_REGISTRATION = true; service.DISABLE_REGISTRATION = true;
@@ -21,7 +21,7 @@
services.traefik.dynamicConfigOptions.http = { services.traefik.dynamicConfigOptions.http = {
services.gitea.loadBalancer.servers = [ services.gitea.loadBalancer.servers = [
{ {
url = "http://localhost:3030/"; url = "http://localhost:${toString (config.m3ta.ports.get "gitea")}/";
} }
]; ];

View File

@@ -1,13 +1,13 @@
{config, ...}: { {config, ...}: {
services.paperless = { services.paperless = {
enable = true; enable = true;
port = 3012; port = config.m3ta.ports.get "paperless";
database.createLocally = true; database.createLocally = true;
passwordFile = config.age.secrets.paperless-key.path; passwordFile = config.age.secrets.paperless-key.path;
configureTika = true; configureTika = true;
settings = { settings = {
PAPERLESS_URL = "https://pl.m3ta.dev"; PAPERLESS_URL = "https://pl.m3ta.dev";
DATABASE_URL = "postgresql://paperless:paperless@127.0.0.1:5432/paperless"; DATABASE_URL = "postgresql://paperless:paperless@127.0.0.1:${toString (config.m3ta.ports.get "postgres")}/paperless";
PAPERLESS_CONSUMER_IGNORE_PATTERN = [ PAPERLESS_CONSUMER_IGNORE_PATTERN = [
".DS_STORE/*" ".DS_STORE/*"
"desktop.ini" "desktop.ini"
@@ -25,7 +25,7 @@
services.traefik.dynamicConfigOptions.http = { services.traefik.dynamicConfigOptions.http = {
services.paperless.loadBalancer.servers = [ services.paperless.loadBalancer.servers = [
{ {
url = "http://localhost:3012/"; url = "http://localhost:${toString (config.m3ta.ports.get "paperless")}/";
} }
]; ];
routers.paperless = { routers.paperless = {

View File

@@ -1,4 +1,8 @@
{pkgs, ...}: { {
pkgs,
config,
...
}: {
services.postgresql = { services.postgresql = {
enable = true; enable = true;
enableTCPIP = true; enableTCPIP = true;
@@ -36,8 +40,8 @@
}; };
networking.firewall = { networking.firewall = {
extraCommands = '' extraCommands = ''
iptables -A INPUT -p tcp -s 127.0.0.1 --dport 5432 -j ACCEPT iptables -A INPUT -p tcp -s 127.0.0.1 --dport ${toString (config.m3ta.ports.get "postgres")} -j ACCEPT
iptables -A INPUT -p tcp -s 10.89.0.0/24 --dport 5432 -j ACCEPT iptables -A INPUT -p tcp -s 10.89.0.0/24 --dport ${toString (config.m3ta.ports.get "postgres")} -j ACCEPT
''; '';
}; };
} }

View File

@@ -1,10 +1,10 @@
{ {config, ...}: {
services.adguardhome = { services.adguardhome = {
enable = true; enable = true;
openFirewall = true; openFirewall = true;
settings = { settings = {
dns = { dns = {
port = 53; port = config.m3ta.ports.get "adguardhome";
upstream_dns = [ upstream_dns = [
"1.1.1.1" "1.1.1.1"
"8.8.8.8" "8.8.8.8"
@@ -20,6 +20,6 @@
}; };
}; };
}; };
networking.firewall.allowedTCPPorts = [53]; networking.firewall.allowedTCPPorts = [(config.m3ta.ports.get "adguardhome")];
networking.firewall.allowedUDPPorts = [53]; networking.firewall.allowedUDPPorts = [(config.m3ta.ports.get "adguardhome")];
} }

View File

@@ -1,26 +0,0 @@
{modulesPath, ...}: {
imports = [
"${modulesPath}/profiles/qemu-guest.nix"
];
system.stateVersion = "24.11";
services.cloud-init = {
enable = true;
};
users.users.root.initialPassword = "nixos";
services.openssh = {
enable = true;
};
networking = {
useNetworkd = true;
firewall.enable = true;
};
systemd.network.enable = true;
console.keyMap = "us";
}

View File

@@ -28,7 +28,6 @@
obs-vaapi obs-vaapi
# obs-vertical-canvas # obs-vertical-canvas
obs-vkcapture obs-vkcapture
obs-webkitgtk
wlrobs wlrobs
]; ];
}; };

View File

@@ -1,3 +1,3 @@
{ {
zellij-ps = import ./zellij-ps.nix; #module = import ./module.nix;
} }

View File

@@ -1,44 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.programs.zellij-ps;
in {
options = {
programs.zellij-ps = {
enable = mkEnableOption "Zellij Project Selector";
projectFolders = lib.mkOption {
type = lib.types.listOf lib.types.path;
description = "List of project folders for zellij-ps.";
default = ["${config.home.homeDirectory}/projects"];
};
layout = lib.mkOption {
type = lib.types.str;
description = "Layout for zellij";
default = ''
layout {
pane size=1 borderless=true {
plugin location="zellij:tab-bar"
}
pane
pane split_direction="vertical" {
pane
pane command="htop"
}
pane size=2 borderless=true {
plugin location="zellij:status-bar"
}
}
'';
};
};
};
config = mkIf cfg.enable {
home.packages = [pkgs.zellij-ps];
home.sessionVariables.PROJECT_FOLDERS = lib.concatStringsSep ":" cfg.projectFolders;
home.file.".config/zellij/layouts/zellij-ps.kdl".text = cfg.layout;
};
}

View File

@@ -0,0 +1,3 @@
{
#module = import ./module.nix;
}

View File

@@ -1,34 +1,30 @@
{inputs, ...}: { {inputs, ...}: {
# This one brings our custom packages from the 'pkgs' directory # This one brings our custom packages from the 'pkgs' directory
additions = final: prev: # additions = final: prev:
(import ../pkgs {pkgs = final;}) # (import ../pkgs {pkgs = final;})
# // (inputs.hyprpanel.overlay final prev) # // {rose-pine-hyprcursor = inputs.rose-pine-hyprcursor.packages.${prev.system}.default;};
// {rose-pine-hyprcursor = inputs.rose-pine-hyprcursor.packages.${prev.system}.default;};
# This one contains whatever you want to overlay # This one contains whatever you want to overlay
# You can change versions, add patches, set compilation flags, anything really. # You can change versions, add patches, set compilation flags, anything really.
# https://nixos.wiki/wiki/Overlays # https://nixos.wiki/wiki/Overlays
modifications = final: prev: {
n8n = import ./mods/n8n.nix {inherit prev;};
brave = prev.brave.override { # modifications = final: prev: {
commandLineArgs = "--password-store=gnome-libsecret"; # n8n = import ./mods/n8n.nix {inherit prev;};
};
# nodejs_24 = inputs.nixpkgs-stable.legacyPackages.${prev.system}.nodejs_24; # brave = prev.brave.override {
# paperless-ngx = inputs.nixpkgs-45570c2.legacyPackages.${prev.system}.paperless-ngx; # commandLineArgs = "--password-store=gnome-libsecret";
# anytype-heart = inputs.nixpkgs-9e58ed7.legacyPackages.${prev.system}.anytype-heart; # };
# trezord = inputs.nixpkgs-2744d98.legacyPackages.${prev.system}.trezord;
# mesa = inputs.nixpkgs-master.legacyPackages.${prev.system}.mesa; # hyprpanel = inputs.hyprpanel.packages.${prev.system}.default.overrideAttrs (prev: {
# hyprpanel = inputs.hyprpanel.packages.${prev.system}.default.overrideAttrs (prev: { # version = "latest"; # or whatever version you want
# version = "latest"; # or whatever version you want # src = final.fetchFromGitHub {
# src = final.fetchFromGitHub { # owner = "Jas-SinghFSU";
# owner = "Jas-SinghFSU"; # repo = "HyprPanel";
# repo = "HyprPanel"; # rev = "master"; # or a specific commit hash
# rev = "master"; # or a specific commit hash # hash = "sha256-l623fIVhVCU/ylbBmohAtQNbK0YrWlEny0sC/vBJ+dU=";
# hash = "sha256-l623fIVhVCU/ylbBmohAtQNbK0YrWlEny0sC/vBJ+dU="; # };
# }; # });
# }); # };
};
temp-packages = final: _prev: { temp-packages = final: _prev: {
temp = import inputs.nixpkgs-9e9486b { temp = import inputs.nixpkgs-9e9486b {

View File

@@ -1,26 +0,0 @@
{prev}:
prev.n8n.overrideAttrs (oldAttrs: rec {
version = "1.88.0";
src = prev.fetchFromGitHub {
owner = "n8n-io";
repo = "n8n";
rev = "n8n@${version}";
hash = "sha256-bCRkwLYwb4gfxA1qMgMeCOc0zcu8bFAPlW577kVq6JY=";
};
pnpmDeps = prev.pnpm_10.fetchDeps {
pname = oldAttrs.pname;
inherit version src;
fetcherVersion = 1;
hash = "sha256-cZzrkxGVyH0gKzV/+2XQdzvks6m0nwR4Z5QnSPlxEJI=";
};
nativeBuildInputs =
builtins.map
(input:
if input == prev.pnpm_9.configHook
then prev.pnpm_10.configHook
else input)
oldAttrs.nativeBuildInputs;
})

View File

@@ -1,56 +0,0 @@
{
lib,
stdenv,
python3,
zlib,
libffi,
makeWrapper,
}: let
pythonEnv = python3.withPackages (ps:
with ps; [
pip
virtualenv
]);
in
stdenv.mkDerivation rec {
pname = "aider-chat-env";
version = "0.1.0";
src = ./.;
nativeBuildInputs = [makeWrapper];
buildInputs = [pythonEnv zlib libffi];
installPhase = ''
mkdir -p $out/bin
cat > $out/bin/aider-chat-env <<EOF
#!/bin/sh
VENV_DIR="\$HOME/.aider-chat-venv"
if [ ! -d "\$VENV_DIR" ]; then
echo "Creating new virtual environment in \$VENV_DIR..."
${pythonEnv}/bin/python -m venv "\$VENV_DIR"
source "\$VENV_DIR/bin/activate"
# Upgrade pip first
python -m pip install --no-cache-dir --upgrade pip
# Install aider-chat
python -m pip install --no-cache-dir aider-chat
else
source "\$VENV_DIR/bin/activate"
fi
exec "\$SHELL"
EOF
chmod +x $out/bin/aider-chat-env
'';
postFixup = ''
wrapProgram $out/bin/aider-chat-env \
--prefix PATH : ${lib.makeBinPath buildInputs} \
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [stdenv.cc.cc.lib zlib libffi]}
'';
meta = with lib; {
description = "Python environment with aider-chat";
license = licenses.mit;
platforms = platforms.all;
};
}

View File

@@ -1,36 +0,0 @@
{
lib,
fetchFromGitHub,
rustPlatform,
pkg-config,
perl,
openssl,
}:
rustPlatform.buildRustPackage rec {
pname = "code2prompt";
version = "3.0.2";
src = fetchFromGitHub {
owner = "mufeedvh";
repo = "code2prompt";
rev = "v${version}";
hash = "sha256-9YbsrbExRFbsEz2GifklmUGp3YlsEUOi25+P5vPK8fs=";
};
cargoLock = {
lockFile = src + "/Cargo.lock";
};
buildAndTestSubdir = "crates/code2prompt";
nativeBuildInputs = [pkg-config perl];
buildInputs = [openssl];
meta = {
description = "A CLI tool that converts your codebase into a single LLM prompt with a source tree, prompt templating, and token counting";
homepage = "https://github.com/mufeedvh/code2prompt";
license = lib.licenses.mit;
mainProgram = "code2prompt";
};
}

View File

@@ -1,13 +1,3 @@
{pkgs, ...}: { {pkgs, ...}: {
# Define your custom packages here # package = pkgs.callPackage ./package {};
hyprpaper-random = pkgs.callPackage ./hyprpaper-random {};
launch-webapp = pkgs.callPackage ./launch-webapp/default.nix {};
msty = pkgs.callPackage ./msty {};
msty-sidecar = pkgs.callPackage ./msty-sidecar {};
msty-studio = pkgs.callPackage ./msty-studio {};
tuxedo-backlight = pkgs.callPackage ./tuxedo-backlight {};
zellij-ps = pkgs.callPackage ./zellij-ps {};
aider-chat-env = pkgs.callPackage ./aider-chat-env {};
code2prompt = pkgs.callPackage ./code2prompt {};
pomodoro-timer = pkgs.callPackage ./pomodoro-timer {};
} }

View File

@@ -1,72 +0,0 @@
{
lib,
stdenv,
writeShellScriptBin,
fd,
hyprland,
coreutils,
gawk,
}: let
script = writeShellScriptBin "hyprpaper-random" ''
#!/usr/bin/env bash
set -euo pipefail
# Directory (override with WALLPAPER_DIR)
DIR="''${WALLPAPER_DIR:-''${XDG_CONFIG_HOME:-$HOME/.config}/hypr/wallpapers}"
HYPRCTL="${hyprland}/bin/hyprctl"
FD="${fd}/bin/fd"
SHUF="${coreutils}/bin/shuf"
TR="${coreutils}/bin/tr"
AWK="${gawk}/bin/awk"
# Pick one random image (null-safe)
WALLPAPER="$(
"$FD" . "$DIR" -t f -e jpg -e jpeg -e png -e webp -e avif -0 --follow --hidden \
| "$SHUF" -z -n1 \
| "$TR" -d '\0'
)"
if [[ -z "''${WALLPAPER:-}" ]]; then
echo "No wallpapers found in: $DIR" >&2
exit 1
fi
# Preload so hyprpaper can use it
"$HYPRCTL" hyprpaper preload "$WALLPAPER" >/dev/null 2>&1 || true
# Apply to all monitors
"$HYPRCTL" monitors \
| "$AWK" '/^Monitor /{print $2}' \
| while IFS= read -r mon; do
[ -n "$mon" ] && "$HYPRCTL" hyprpaper wallpaper "$mon,$WALLPAPER"
done
exit 0
'';
in
stdenv.mkDerivation {
pname = "hyprpaper-random";
version = "0.1.1";
dontUnpack = true;
buildInputs = [
fd
hyprland
coreutils
gawk
];
installPhase = ''
mkdir -p "$out/bin"
ln -s ${script}/bin/hyprpaper-random "$out/bin/hyprpaper-random"
'';
meta = with lib; {
description = "Minimal random wallpaper setter for Hyprpaper";
license = licenses.mit;
platforms = platforms.linux;
mainProgram = "hyprpaper-random";
};
}

View File

@@ -1,41 +0,0 @@
{
lib,
stdenv,
writeShellScriptBin,
}: let
launcher = writeShellScriptBin "launch-webapp" ''
#!/usr/bin/env bash
browser=$(xdg-settings get default-web-browser)
case "$browser" in
google-chrome*) browser_bin="google-chrome" ;;
brave-browser*) browser_bin="brave-browser" ;;
microsoft-edge*) browser_bin="microsoft-edge" ;;
opera*) browser_bin="opera" ;;
vivaldi*) browser_bin="vivaldi" ;;
*) browser_bin="chromium" ;;
esac
exec_cmd="/etc/profiles/per-user/$USER/bin/$browser_bin"
exec setsid uwsm app -- "$exec_cmd" --app="$1" ''${@:2}
'';
in
stdenv.mkDerivation {
pname = "launch-webapp";
version = "0.1.0";
dontUnpack = true;
installPhase = ''
mkdir -p $out/bin
ln -s ${launcher}/bin/launch-webapp $out/bin/launch-webapp
'';
meta = with lib; {
description = "Launches a web app using your default browser in app mode.";
license = licenses.mit;
platforms = platforms.linux;
maintainers = [];
};
}

View File

@@ -1,38 +0,0 @@
{
appimageTools,
fetchurl,
nodejs,
nodePackages,
uv,
python3,
makeWrapper,
}: let
pname = "msty-sidecar";
version = "0.4.0";
src = fetchurl {
url = "https://sidecar-assets.msty.studio/prod/latest/linux/amd64/MstySidecar_x86_64_amd64.AppImage";
sha256 = "sha256-UhsokCG0NPqn5nhn//AaIuY6sWlZkejNlqMEyN4Opqg=";
};
appimageContents = appimageTools.extractType2 {inherit pname version src;};
in
appimageTools.wrapType2 {
inherit pname version src;
nativeBuildInputs = [makeWrapper];
extraPkgs = pkgs: [
nodejs
nodePackages.npm
uv
python3
];
extraInstallCommands = ''
install -m 444 -D ${appimageContents}/mstysidecar.desktop -t $out/share/applications
substituteInPlace $out/share/applications/mstysidecar.desktop \
--replace 'Exec=AppRun' 'Exec=${pname}'
install -m 444 -D ${appimageContents}/mstysidecar.png \
$out/share/icons/hicolor/256x256/apps/mstysidecar.png
wrapProgram $out/bin/${pname} \
--prefix PATH : ${nodejs}/bin:${nodePackages.npm}/bin:${uv}/bin:${python3}/bin
'';
}

View File

@@ -1,38 +0,0 @@
{
appimageTools,
fetchurl,
nodejs,
nodePackages,
uv,
python3,
makeWrapper,
}: let
pname = "msty-studio";
version = "2.0.0-alpha.11";
src = fetchurl {
url = "https://next-assets.msty.studio/app/alpha/linux/MstyStudio_x86_64.AppImage";
sha256 = "sha256-jp0kMBB6ks6j++VvM1XG37spLEXU1SmVXRNJpr5SmOA=";
};
appimageContents = appimageTools.extractType2 {inherit pname version src;};
in
appimageTools.wrapType2 {
inherit pname version src;
nativeBuildInputs = [makeWrapper];
extraPkgs = pkgs: [
nodejs
nodePackages.npm
uv
python3
];
extraInstallCommands = ''
install -m 444 -D ${appimageContents}/MstyStudio.desktop -t $out/share/applications
substituteInPlace $out/share/applications/MstyStudio.desktop \
--replace 'Exec=AppRun' 'Exec=${pname}'
install -m 444 -D ${appimageContents}/MstyStudio.png \
$out/share/icons/hicolor/256x256/apps/MstyStudio.png
wrapProgram $out/bin/${pname} \
--prefix PATH : ${nodejs}/bin:${nodePackages.npm}/bin:${uv}/bin:${python3}/bin
'';
}

View File

@@ -1,28 +0,0 @@
{
appimageTools,
fetchurl,
makeWrapper,
}: let
pname = "msty";
version = "1.9.2";
src = fetchurl {
url = "https://assets.msty.app/prod/latest/linux/amd64/Msty_x86_64_amd64.AppImage";
sha256 = "sha256-Z4t0EcV9X4g5X0lBwipiMdP8lgPuBkhykAIKjHSUpnI=";
};
appimageContents = appimageTools.extractType2 {inherit pname version src;};
in
appimageTools.wrapType2 {
inherit pname version src;
nativeBuildInputs = [makeWrapper];
extraInstallCommands = ''
install -m 444 -D ${appimageContents}/msty.desktop -t $out/share/applications
substituteInPlace $out/share/applications/msty.desktop \
--replace 'Exec=AppRun' 'Exec=${pname}'
install -m 444 -D ${appimageContents}/msty.png \
$out/share/icons/hicolor/256x256/apps/msty.png
wrapProgram $out/bin/${pname} \
--set XDG_CURRENT_DESKTOP GNOME
'';
}

View File

@@ -1,92 +0,0 @@
{
lib,
stdenv,
writeShellScriptBin,
timer,
kitty,
rofi,
libnotify,
speechd,
}: let
launcher = writeShellScriptBin "launch-timer" ''
#!/bin/bash
validate_time() {
local input=$1
if [[ $input =~ ^[0-9]+[mhs]$ ]]; then
return 0
else
return 1
fi
}
notify_end() {
local session_name=$1
${libnotify}/bin/notify-send "Pomodoro" "$session_name session ended!"
${speechd}/bin/spd-say "$session_name session ended"
}
start_timer() {
local duration=$1
local session_name=$2
kitty \
--class="floating-pomodoro" \
--title="floating-pomodoro" \
${timer}/bin/timer $duration
notify_end "$session_name"
}
# Show rofi menu with options
selected=$(printf "work\nbreak\ncustom" | rofi -dmenu -p "Work Timer:" -l 3)
# Exit if no selection was made
[ -z "$selected" ] && exit
case $selected in
"work")
start_timer "45m" "work"
;;
"break")
start_timer "10m" "break"
;;
"custom")
# Show input dialog for custom time
custom_time=$(rofi -dmenu -p "Enter time (e.g., 25m, 1h, 30s):" -l 0)
# Validate input and start timer
if [ ! -z "$custom_time" ] && validate_time "$custom_time"; then
start_timer "$custom_time" "custom"
else
${libnotify}/bin/notify-send "Invalid time format" "Please use format: 30s, 25m, or 1h"
exit 1
fi
;;
esac
'';
in
stdenv.mkDerivation {
pname = "work-timer";
version = "0.1.0";
dontUnpack = true;
buildInputs = [
timer
kitty
rofi
libnotify
speechd
];
installPhase = ''
mkdir -p $out/bin
ln -s ${launcher}/bin/launch-timer $out/bin/launch-timer
'';
meta = with lib; {
description = "A Work timer.";
license = licenses.mit;
platforms = platforms.linux;
maintainers = [];
};
}

View File

@@ -1,26 +0,0 @@
{writeShellScriptBin}:
writeShellScriptBin "tuxedo-backlight" ''
# all keys
echo '0 150 255' | tee /sys/class/leds/rgb:kbd_backlight*/multi_intensity
# DEL key
echo '255 0 155' | tee /sys/class/leds/rgb:kbd_backlight_15/multi_intensity
# ESC key
echo '255 0 155' | tee /sys/class/leds/rgb:kbd_backlight/multi_intensity
# function and Fn keys
for i in {1..12} 102; do
echo '0 255 80' | tee /sys/class/leds/rgb:kbd_backlight_$i/multi_intensity
done
# complete numblock and keys above
for i in {16..19} {36..39} {56..59} {76..79} {96..99} {117..119}; do
echo '255 150 0' | tee /sys/class/leds/rgb:kbd_backlight_$i/multi_intensity
done
# arrow keys
for i in 95 {114..116}; do
echo '0 255 80' | tee /sys/class/leds/rgb:kbd_backlight_$i/multi_intensity
done
''

View File

@@ -1,41 +0,0 @@
{
lib,
stdenv,
fetchFromGitea,
fish,
fd,
fzf,
makeWrapper,
zellij,
}:
with lib;
stdenv.mkDerivation {
pname = "zellij-ps";
version = "0.1.0";
src = fetchFromGitea {
domain = "code.m3tam3re.com";
owner = "m3tam3re";
repo = "helper-scripts";
rev = "08a3217b83391c1110545c1ee3161eecd5dbe5e9";
sha256 = "1sc4i58mwcg3qsq0wwl5rvk08ykbxc497bq7mrxiirndsarskby7";
};
buildInputs = [];
nativeBuildInputs = [makeWrapper];
installPhase = ''
mkdir -p $out/bin
cp zellij-ps.fish $out/bin/zellij-ps
wrapProgram $out/bin/zellij-ps \
--prefix PATH : ${lib.makeBinPath [fish fd fzf zellij]}
'';
meta = with lib; {
description = "A small project script for zellij";
homepage = "https://code.m3tam3re.com/m3tam3re/helper-scripts";
license = licenses.mit;
maintainers = with maintainers; [m3tam3re];
platforms = platforms.unix;
};
}