mirror of
https://github.com/tuxdotrs/nix-config.git
synced 2026-05-07 02:16:33 +05:30
feat: setup base
This commit is contained in:
431
flake.lock
generated
Normal file
431
flake.lock
generated
Normal file
@@ -0,0 +1,431 @@
|
||||
{
|
||||
"nodes": {
|
||||
"deploy-rs": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"utils": "utils"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1770019181,
|
||||
"narHash": "sha256-hwsYgDnby50JNVpTRYlF3UR/Rrpt01OrxVuryF40CFY=",
|
||||
"owner": "serokell",
|
||||
"repo": "deploy-rs",
|
||||
"rev": "77c906c0ba56aabdbc72041bf9111b565cdd6171",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "serokell",
|
||||
"repo": "deploy-rs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"disko": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777713215,
|
||||
"narHash": "sha256-8GzXDOXckDWwST8TY5DbwYFjdvQLlP7K9CLSVx6iTTo=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "63b4e7e6cf75307c1d26ac3762b886b5b0247267",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1733328505,
|
||||
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777678872,
|
||||
"narHash": "sha256-EPIFsulyon7Z1vLQq5Fk64GR8L7cQsT+IPhcsukVbgk=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "5250617bffd85403b14dbf43c3870e7f255d2c16",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777846259,
|
||||
"narHash": "sha256-jzln9xcpVcmEB1zfhJ+FIHd7/kaVHgGF+gQQHxj2fGI=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "4625f26228f4f7ea3cf65eee3023359a8221fcff",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"impermanence",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1768598210,
|
||||
"narHash": "sha256-kkgA32s/f4jaa4UG+2f8C225Qvclxnqs76mf8zvTVPg=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "c47b2cc64a629f8e075de52e4742de688f930dc6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"impermanence": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager_2",
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1769548169,
|
||||
"narHash": "sha256-03+JxvzmfwRu+5JafM0DLbxgHttOQZkUtDWBmeUkN8Y=",
|
||||
"owner": "nix-community",
|
||||
"repo": "impermanence",
|
||||
"rev": "7b1d382faf603b6d264f58627330f9faa5cba149",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "impermanence",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"import-tree": {
|
||||
"locked": {
|
||||
"lastModified": 1773693634,
|
||||
"narHash": "sha256-BtZ2dtkBdSUnFPPFc+n0kcMbgaTxzFNPv2iaO326Ffg=",
|
||||
"owner": "vic",
|
||||
"repo": "import-tree",
|
||||
"rev": "c41e7d58045f9057880b0d85e1152d6a4430dbf1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "vic",
|
||||
"repo": "import-tree",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"lan-mouse": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_3",
|
||||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777496383,
|
||||
"narHash": "sha256-mebY9G6bvaP7F312eZZh9CFlBxwj/LfeEXVuId85x/w=",
|
||||
"owner": "feschber",
|
||||
"repo": "lan-mouse",
|
||||
"rev": "3e7b04c1848afb2d77f802c7ddf1f5f3720c1b47",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "feschber",
|
||||
"repo": "lan-mouse",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixos-hardware": {
|
||||
"locked": {
|
||||
"lastModified": 1777796046,
|
||||
"narHash": "sha256-bEJp/zaQApzynGRaAO62BZSz9tFikKtIHCn2yIA/s7Q=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "eeb02f6e29fc8139c0b15af5ff0fdfdc6d0d3d90",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "master",
|
||||
"repo": "nixos-hardware",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1743014863,
|
||||
"narHash": "sha256-jAIUqsiN2r3hCuHji80U7NNEafpIMBXiwKlSrjWMlpg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "bd3bac8bfb542dbde7ffffb6987a1a1f9d41699f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1777805331,
|
||||
"narHash": "sha256-jINoZUP2tJEBLuVoMEhJn9qWQgpriGorwlgnBc1QAPg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "8cbe20ad0f64f9f9619b871dfdf57022beccef65",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-25.11-small",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1768564909,
|
||||
"narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1772963539,
|
||||
"narHash": "sha256-9jVDGZnvCckTGdYT53d/EfznygLskyLQXYwJLKMPsZs=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "9dcb002ca1690658be4a04645215baea8b95f31d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"locked": {
|
||||
"lastModified": 1777578337,
|
||||
"narHash": "sha256-Ad49moKWeXtKBJNy2ebiTQUEgdLyvGmTeykAQ9xM+Z4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "15f4ee454b1dce334612fa6843b3e05cf546efab",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1777918403,
|
||||
"narHash": "sha256-7QiZv0LcW1yIOLo2LNuCQjWon1Z1r99FwK24hbtBOF4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "afc5551119aae6eab73a95c1960891cfe63204f6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_6": {
|
||||
"locked": {
|
||||
"lastModified": 1770107345,
|
||||
"narHash": "sha256-tbS0Ebx2PiA1FRW8mt8oejR0qMXmziJmPaU1d4kYY9g=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4533d9293756b63904b7238acb84ac8fe4c8c2c4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"deploy-rs": "deploy-rs",
|
||||
"disko": "disko",
|
||||
"flake-parts": "flake-parts",
|
||||
"home-manager": "home-manager",
|
||||
"impermanence": "impermanence",
|
||||
"import-tree": "import-tree",
|
||||
"lan-mouse": "lan-mouse",
|
||||
"nixos-hardware": "nixos-hardware",
|
||||
"nixpkgs": "nixpkgs_4",
|
||||
"nixpkgs-stable": "nixpkgs-stable",
|
||||
"sops-nix": "sops-nix",
|
||||
"tnvim": "tnvim",
|
||||
"treefmt-nix": "treefmt-nix"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"lan-mouse",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773025773,
|
||||
"narHash": "sha256-Wik8+xApNfldpUFjPmJkPdg0RrvUPSWGIZis+A/0N1w=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "3c06fdbbd36ff60386a1e590ee0cd52dcd1892bf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"sops-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_5"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777944972,
|
||||
"narHash": "sha256-VfGRo1qTBKOe3s2gOv8LSoA6Fk19PvBlwQ1ECN0Evn8=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "c591bf665727040c6cc5cb409079acb22dcce33c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"tnvim": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772111181,
|
||||
"narHash": "sha256-cHBFhVspigIEfCIA3lteRYrBkXTT6j9A8eyypZOOTNI=",
|
||||
"owner": "tuxdotrs",
|
||||
"repo": "tnvim",
|
||||
"rev": "476698308f1568aa1aaa07ed5fb65dc6d92f5f2d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tuxdotrs",
|
||||
"repo": "tnvim",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"treefmt-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_6"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775636079,
|
||||
"narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=",
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
37
flake.nix
Normal file
37
flake.nix
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
description = "tux's nix configurations";
|
||||
|
||||
outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./modules);
|
||||
|
||||
inputs = {
|
||||
flake-parts = {
|
||||
url = "github:hercules-ci/flake-parts";
|
||||
inputs.nixpkgs-lib.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
disko = {
|
||||
url = "github:nix-community/disko";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
tnvim = {
|
||||
url = "github:tuxdotrs/tnvim";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
import-tree.url = "github:vic/import-tree";
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.11-small";
|
||||
impermanence.url = "github:nix-community/impermanence";
|
||||
deploy-rs.url = "github:serokell/deploy-rs";
|
||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||
sops-nix.url = "github:Mic92/sops-nix";
|
||||
treefmt-nix.url = "github:numtide/treefmt-nix";
|
||||
lan-mouse.url = "github:feschber/lan-mouse";
|
||||
};
|
||||
}
|
||||
4
modules/flake/flake-parts.nix
Normal file
4
modules/flake/flake-parts.nix
Normal file
@@ -0,0 +1,4 @@
|
||||
{ inputs, ... }:
|
||||
{
|
||||
imports = [ inputs.flake-parts.flakeModules.modules ];
|
||||
}
|
||||
28
modules/flake/overlays.nix
Normal file
28
modules/flake/overlays.nix
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
inputs,
|
||||
withSystem,
|
||||
...
|
||||
}:
|
||||
{
|
||||
flake.overlays = {
|
||||
modifications = final: prev: {
|
||||
tnvim = inputs.tnvim.packages.${prev.stdenv.hostPlatform.system}.default;
|
||||
};
|
||||
|
||||
stable-packages = final: _prev: {
|
||||
stable = import inputs.nixpkgs-stable {
|
||||
system = final.stdenv.hostPlatform.system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
perSystem =
|
||||
{ system, ... }:
|
||||
{
|
||||
_module.args.pkgs = import inputs.nixpkgs {
|
||||
inherit system;
|
||||
overlays = builtins.attrValues inputs.self.overlays;
|
||||
};
|
||||
};
|
||||
}
|
||||
6
modules/flake/systems.nix
Normal file
6
modules/flake/systems.nix
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
systems = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
];
|
||||
}
|
||||
23
modules/flake/treefmt.nix
Normal file
23
modules/flake/treefmt.nix
Normal file
@@ -0,0 +1,23 @@
|
||||
{ inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
inputs.treefmt-nix.flakeModule
|
||||
];
|
||||
|
||||
perSystem =
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
system,
|
||||
...
|
||||
}:
|
||||
{
|
||||
treefmt.config = {
|
||||
projectRootFile = "flake.nix";
|
||||
flakeCheck = true;
|
||||
programs = {
|
||||
nixfmt.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
13
modules/hm/core/hm.nix
Normal file
13
modules/hm/core/hm.nix
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
flake.modules.homeManager.core =
|
||||
{ userName, ... }:
|
||||
{
|
||||
programs.home-manager.enable = true;
|
||||
systemd.user.startServices = "sd-switch";
|
||||
|
||||
home = {
|
||||
username = "${userName}";
|
||||
homeDirectory = "/home/${userName}";
|
||||
};
|
||||
};
|
||||
}
|
||||
18
modules/hm/core/nixpkgs.nix
Normal file
18
modules/hm/core/nixpkgs.nix
Normal file
@@ -0,0 +1,18 @@
|
||||
{ inputs, ... }:
|
||||
{
|
||||
flake.modules.homeManager.core =
|
||||
{
|
||||
lib,
|
||||
osConfig ? { },
|
||||
...
|
||||
}:
|
||||
{
|
||||
nixpkgs = lib.mkIf (!(osConfig.home-manager.useGlobalPkgs or false)) {
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
joypixels.acceptLicense = true;
|
||||
};
|
||||
overlays = builtins.attrValues inputs.self.overlays;
|
||||
};
|
||||
};
|
||||
}
|
||||
39
modules/hm/desktop/lan-mouse.nix
Normal file
39
modules/hm/desktop/lan-mouse.nix
Normal file
@@ -0,0 +1,39 @@
|
||||
{ inputs, ... }:
|
||||
{
|
||||
flake.modules.homeManager.desktop =
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.tnix.services.lan-mouse;
|
||||
in
|
||||
{
|
||||
imports = [ inputs.lan-mouse.homeManagerModules.default ];
|
||||
|
||||
options.tnix.services.lan-mouse = {
|
||||
enable = mkEnableOption "Enable Lan-Mouse";
|
||||
|
||||
settings = mkOption {
|
||||
type = (pkgs.formats.toml { }).type;
|
||||
default = { };
|
||||
description = ''
|
||||
TOML configuration for lan-mouse.
|
||||
See <https://github.com/feschber/lan-mouse/> for available options.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
programs.lan-mouse = {
|
||||
enable = true;
|
||||
systemd = true;
|
||||
settings = cfg.settings;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
5
modules/hm/shell/bat.nix
Normal file
5
modules/hm/shell/bat.nix
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
flake.modules.homeManager.shell = {
|
||||
programs.bat.enable = true;
|
||||
};
|
||||
}
|
||||
12
modules/hm/shell/btop.nix
Normal file
12
modules/hm/shell/btop.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
flake.modules.homeManager.shell = {
|
||||
programs.btop = {
|
||||
enable = true;
|
||||
settings = {
|
||||
theme_background = false;
|
||||
update_ms = 1000;
|
||||
presets = "cpu:0:default mem:0:default net:0:default";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
69
modules/hm/shell/fastfetch.nix
Normal file
69
modules/hm/shell/fastfetch.nix
Normal file
@@ -0,0 +1,69 @@
|
||||
{
|
||||
flake.modules.homeManager.shell = {
|
||||
home.file.".config/fastfetch/config.jsonc".text = ''
|
||||
{
|
||||
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||
"logo": {
|
||||
"type": "none",
|
||||
},
|
||||
"display": {
|
||||
"separator": " ",
|
||||
"key": {
|
||||
"width": 18,
|
||||
},
|
||||
},
|
||||
"modules": [
|
||||
{
|
||||
"key": " ╭───────────╮",
|
||||
"type": "custom",
|
||||
},
|
||||
{
|
||||
"key": " │ │\u001b[11D{#31} user",
|
||||
"type": "title",
|
||||
"format": "{1}",
|
||||
},
|
||||
{
|
||||
"key": " │ │\u001b[11D{#34} hname",
|
||||
"type": "command",
|
||||
"text": "hostname",
|
||||
},
|
||||
{
|
||||
"key": " │ │\u001b[11D{#34} distro",
|
||||
"type": "os",
|
||||
},
|
||||
{
|
||||
"key": " │ │\u001b[11D{#35} kernel",
|
||||
"type": "kernel",
|
||||
},
|
||||
{
|
||||
"key": " │ │\u001b[11D{#31} uptime",
|
||||
"type": "uptime",
|
||||
},
|
||||
{
|
||||
"key": " │ │\u001b[11D{#32} shell",
|
||||
"type": "shell",
|
||||
},
|
||||
{
|
||||
"key": " │ │\u001b[11D{#35} memory",
|
||||
"type": "memory",
|
||||
},
|
||||
{
|
||||
"key": " ├───────────┤",
|
||||
"type": "custom",
|
||||
},
|
||||
{
|
||||
"key": " │ │\u001b[11D{#39} colors",
|
||||
"type": "colors",
|
||||
"symbol": "circle",
|
||||
},
|
||||
{
|
||||
"key": " ╰───────────╯",
|
||||
"type": "custom",
|
||||
},
|
||||
],
|
||||
}
|
||||
'';
|
||||
|
||||
programs.fastfetch.enable = true;
|
||||
};
|
||||
}
|
||||
8
modules/hm/shell/fzf.nix
Normal file
8
modules/hm/shell/fzf.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
flake.modules.homeManager.shell = {
|
||||
programs.fzf = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
26
modules/hm/shell/git.nix
Normal file
26
modules/hm/shell/git.nix
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
flake.modules.homeManager.shell =
|
||||
{
|
||||
userName,
|
||||
userEmail,
|
||||
...
|
||||
}:
|
||||
{
|
||||
programs.git = {
|
||||
enable = true;
|
||||
signing = {
|
||||
key = "~/.ssh/id_ed25519.pub";
|
||||
signByDefault = true;
|
||||
};
|
||||
settings = {
|
||||
user = {
|
||||
name = "${userName}";
|
||||
email = "${userEmail}";
|
||||
};
|
||||
init.defaultBranch = "main";
|
||||
commit.gpgSign = true;
|
||||
gpg.format = "ssh";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
173
modules/hm/shell/lazygit.nix
Normal file
173
modules/hm/shell/lazygit.nix
Normal file
@@ -0,0 +1,173 @@
|
||||
{
|
||||
flake.modules.homeManager.shell = {
|
||||
programs.lazygit = {
|
||||
enable = true;
|
||||
settings = {
|
||||
gui = {
|
||||
showIcons = true;
|
||||
nerdFontsVersion = "3";
|
||||
};
|
||||
customCommands = [
|
||||
{
|
||||
key = "<c-a>";
|
||||
description = "AI-powered conventional commit";
|
||||
context = "global";
|
||||
command = "git commit -m \"{{.Form.CommitMsg}}\"";
|
||||
loadingText = "Generating commit messages...";
|
||||
prompts = [
|
||||
{
|
||||
type = "menu";
|
||||
key = "Type";
|
||||
title = "Type of change";
|
||||
options = [
|
||||
{
|
||||
name = "AI defined";
|
||||
description = "Let AI analyze and determine the best commit type";
|
||||
value = "ai-defined";
|
||||
}
|
||||
{
|
||||
name = "build";
|
||||
description = "Changes that affect the build system or external dependencies";
|
||||
value = "build";
|
||||
}
|
||||
{
|
||||
name = "feat";
|
||||
description = "A new feature";
|
||||
value = "feat";
|
||||
}
|
||||
{
|
||||
name = "fix";
|
||||
description = "A bug fix";
|
||||
value = "fix";
|
||||
}
|
||||
{
|
||||
name = "chore";
|
||||
description = "Other changes that don't modify src or test files";
|
||||
value = "chore";
|
||||
}
|
||||
{
|
||||
name = "ci";
|
||||
description = "Changes to CI configuration files and scripts";
|
||||
value = "ci";
|
||||
}
|
||||
{
|
||||
name = "docs";
|
||||
description = "Documentation only changes";
|
||||
value = "docs";
|
||||
}
|
||||
{
|
||||
name = "perf";
|
||||
description = "A code change that improves performance";
|
||||
value = "perf";
|
||||
}
|
||||
{
|
||||
name = "refactor";
|
||||
description = "A code change that neither fixes a bug nor adds a feature";
|
||||
value = "refactor";
|
||||
}
|
||||
{
|
||||
name = "revert";
|
||||
description = "Reverts a previous commit";
|
||||
value = "revert";
|
||||
}
|
||||
{
|
||||
name = "style";
|
||||
description = "Changes that do not affect the meaning of the code";
|
||||
value = "style";
|
||||
}
|
||||
{
|
||||
name = "test";
|
||||
description = "Adding missing tests or correcting existing tests";
|
||||
value = "test";
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
type = "menuFromCommand";
|
||||
title = "AI Generated Commit Messages";
|
||||
key = "CommitMsg";
|
||||
command = ''
|
||||
bash -c "
|
||||
# Check for staged changes
|
||||
diff=\$(git diff --cached | head -n 10)
|
||||
if [ -z \"\$diff\" ]; then
|
||||
echo \"No changes in staging. Add changes first.\"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SELECTED_TYPE=\"{{.Form.Type}}\"
|
||||
COMMITS_TO_SUGGEST=8
|
||||
|
||||
opencode run -m \"google/gemini-2.5-flash-lite\" \"
|
||||
You are an expert at writing Git commits. Your job is to write commit messages that follow the Conventional Commits format.
|
||||
|
||||
The user has selected: \$SELECTED_TYPE
|
||||
|
||||
Your task is to:
|
||||
1. Analyze the code changes
|
||||
2. Determine the most appropriate commit type (if user selected 'ai-defined')
|
||||
3. Determine an appropriate scope (component/area affected)
|
||||
4. Decide if this is a breaking change
|
||||
5. Write clear, concise commit messages
|
||||
|
||||
Available commit types:
|
||||
- feat: A new feature
|
||||
- fix: A bug fix
|
||||
- docs: Documentation only changes
|
||||
- style: Changes that do not affect the meaning of the code
|
||||
- refactor: A code change that neither fixes a bug nor adds a feature
|
||||
- perf: A code change that improves performance
|
||||
- test: Adding missing tests or correcting existing tests
|
||||
- build: Changes that affect the build system or external dependencies
|
||||
- ci: Changes to CI configuration files and scripts
|
||||
- chore: Other changes that don't modify src or test files
|
||||
- revert: Reverts a previous commit
|
||||
|
||||
Follow these guidelines:
|
||||
- Structure: <type>(<scope>): <description>
|
||||
- If user selected 'ai-defined', analyze the changes and pick the most suitable type
|
||||
- If user selected a specific type, use that type: \$SELECTED_TYPE
|
||||
- Add scope in parentheses if applicable (e.g., auth, api, ui, config)
|
||||
- Use exclamation mark (!) after type/scope for breaking changes: type(scope)!: description
|
||||
- Use lowercase for description (except proper nouns)
|
||||
- Use imperative mood (\\\"add\\\", not \\\"added\\\")
|
||||
- Keep description under 50 characters when possible
|
||||
- No period at the end of subject line
|
||||
|
||||
Examples:
|
||||
- feat(auth): add OAuth login support
|
||||
- fix(api): handle null response in user endpoint
|
||||
- docs(readme): update installation instructions
|
||||
- style(ui): improve button spacing consistency
|
||||
- refactor(database): simplify query builder logic
|
||||
- test(auth): add unit tests for login flow
|
||||
- build(deps): upgrade React to version 18
|
||||
- ci(github): fix deployment workflow
|
||||
- chore(config): update ESLint rules
|
||||
- perf(api)!: optimize database queries
|
||||
|
||||
IMPORTANT:
|
||||
- Generate exactly \$COMMITS_TO_SUGGEST different commit message options
|
||||
- If user selected 'ai-defined', you can use different types for different options
|
||||
- If user selected a specific type, all messages must use that type
|
||||
- Only return commit messages, no explanations
|
||||
- Do not use markdown code blocks
|
||||
- One message per line
|
||||
|
||||
Previous commits for context:
|
||||
\$(git log --oneline -10)
|
||||
|
||||
Changes to analyze:
|
||||
\$(git diff --cached --stat)
|
||||
\$(git diff --cached)
|
||||
\"
|
||||
"
|
||||
'';
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
8
modules/hm/shell/lsd.nix
Normal file
8
modules/hm/shell/lsd.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
flake.modules.homeManager.shell = {
|
||||
programs.lsd = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
42
modules/hm/shell/neovim.nix
Normal file
42
modules/hm/shell/neovim.nix
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
flake.modules.homeManager.shell =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.file = {
|
||||
".config/nvim" = {
|
||||
recursive = true;
|
||||
source = "${pkgs.tnvim}";
|
||||
};
|
||||
};
|
||||
|
||||
programs = {
|
||||
neovim = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
vimAlias = true;
|
||||
};
|
||||
};
|
||||
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
gcc
|
||||
neovide
|
||||
|
||||
# nix
|
||||
nil # Language Server
|
||||
statix # Lints and suggestions
|
||||
deadnix # Find and remove unused
|
||||
alejandra # Code Formatter
|
||||
|
||||
# lua
|
||||
luarocks
|
||||
|
||||
# ts
|
||||
typescript
|
||||
|
||||
gdu
|
||||
ripgrep
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
24
modules/hm/shell/opencode.nix
Normal file
24
modules/hm/shell/opencode.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
flake.modules.homeManager.shell = {
|
||||
programs.opencode = {
|
||||
enable = true;
|
||||
tui = {
|
||||
theme = "system";
|
||||
};
|
||||
settings = {
|
||||
provider = {
|
||||
google = {
|
||||
options = {
|
||||
apiKey = "{file:/run/secrets/gemini_api_key}";
|
||||
};
|
||||
};
|
||||
openrouter = {
|
||||
options = {
|
||||
apiKey = "{file:/run/secrets/open_router_api_key}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
5
modules/hm/shell/ripgrep.nix
Normal file
5
modules/hm/shell/ripgrep.nix
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
flake.modules.homeManager.shell = {
|
||||
programs.ripgrep.enable = true;
|
||||
};
|
||||
}
|
||||
52
modules/hm/shell/starship.nix
Normal file
52
modules/hm/shell/starship.nix
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
flake.modules.homeManager.shell = {
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
format = "$os$hostname$directory$rust$golang$solidity$nodejs(bold blue)$git_branch$git_status[❯](bold yellow)[❯](bold purple)[❯](bold blue) ";
|
||||
scan_timeout = 60;
|
||||
add_newline = false;
|
||||
line_break.disabled = true;
|
||||
|
||||
os = {
|
||||
format = "[$symbol ]($style)";
|
||||
style = "bold green";
|
||||
disabled = false;
|
||||
symbols.NixOS = "";
|
||||
symbols.Linux = "";
|
||||
symbols.Arch = "";
|
||||
symbols.Ubuntu = "";
|
||||
};
|
||||
directory = {
|
||||
format = "[$path]($style)[$read_only ]($read_only_style)";
|
||||
read_only = " ";
|
||||
style = "bold blue";
|
||||
};
|
||||
git_branch.format = "[$symbol$branch]($style) ";
|
||||
hostname = {
|
||||
ssh_only = false;
|
||||
format = "[$ssh_symbol$hostname]($style) ";
|
||||
style = "bold green";
|
||||
ssh_symbol = " ";
|
||||
disabled = false;
|
||||
};
|
||||
rust = {
|
||||
format = "[$symbol]($style)";
|
||||
symbol = " ";
|
||||
};
|
||||
golang = {
|
||||
format = "[$symbol]($style)";
|
||||
symbol = " ";
|
||||
};
|
||||
solidity = {
|
||||
format = "[$symbol]($style)";
|
||||
symbol = " ";
|
||||
};
|
||||
nodejs = {
|
||||
format = "[$symbol]($style)";
|
||||
symbol = " ";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
43
modules/hm/shell/superfile.nix
Normal file
43
modules/hm/shell/superfile.nix
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
flake.modules.homeManager.shell = {
|
||||
programs.superfile = {
|
||||
enable = true;
|
||||
settings = {
|
||||
theme = "poimandres";
|
||||
editor = "";
|
||||
dir_editor = "";
|
||||
auto_check_update = false;
|
||||
cd_on_quit = false;
|
||||
default_open_file_preview = true;
|
||||
show_image_preview = true;
|
||||
show_panel_footer_info = true;
|
||||
default_directory = "~";
|
||||
file_size_use_si = false;
|
||||
default_sort_type = 0;
|
||||
sort_order_reversed = false;
|
||||
case_sensitive_sort = false;
|
||||
shell_close_on_success = false;
|
||||
debug = false;
|
||||
ignore_missing_fields = false;
|
||||
nerdfont = true;
|
||||
transparent_background = true;
|
||||
file_preview_width = 0;
|
||||
code_previewer = "bat";
|
||||
sidebar_width = 20;
|
||||
border_top = "─";
|
||||
border_bottom = "─";
|
||||
border_left = "│";
|
||||
border_right = "│";
|
||||
border_top_left = "╭";
|
||||
border_top_right = "╮";
|
||||
border_bottom_left = "╰";
|
||||
border_bottom_right = "╯";
|
||||
border_middle_left = "├";
|
||||
border_middle_right = "┤";
|
||||
metadata = true;
|
||||
zoxide_support = true;
|
||||
enable_md5_checksum = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
155
modules/hm/shell/tmux.nix
Normal file
155
modules/hm/shell/tmux.nix
Normal file
@@ -0,0 +1,155 @@
|
||||
{
|
||||
flake.modules.homeManager.shell =
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
bg = "default";
|
||||
fg = "default";
|
||||
bg2 = "brightblack";
|
||||
fg2 = "white";
|
||||
color = c: "#{@${c}}";
|
||||
|
||||
indicator =
|
||||
let
|
||||
accent = color "indicator_color";
|
||||
content = " ";
|
||||
in
|
||||
"#[reverse,fg=${accent}]#{?client_prefix,${content},}";
|
||||
|
||||
current_window =
|
||||
let
|
||||
accent = color "main_accent";
|
||||
index = "#[reverse,fg=${accent},bg=${fg}] #I ";
|
||||
name = "#[fg=${bg2},bg=${fg2}] #W ";
|
||||
# flags = "#{?window_flags,#{window_flags}, }";
|
||||
in
|
||||
"${index}${name}";
|
||||
|
||||
window_status =
|
||||
let
|
||||
accent = color "window_color";
|
||||
index = "#[reverse,fg=${accent},bg=${fg}] #I ";
|
||||
name = "#[fg=${bg2},bg=${fg2}] #W ";
|
||||
# flags = "#{?window_flags,#{window_flags}, }";
|
||||
in
|
||||
"${index}${name}";
|
||||
|
||||
battery =
|
||||
let
|
||||
percentage = pkgs.writeShellScript "percentage" (
|
||||
if pkgs.stdenv.isDarwin then
|
||||
''
|
||||
echo $(pmset -g batt | grep -o "[0-9]\+%" | tr '%' ' ')
|
||||
''
|
||||
else
|
||||
''
|
||||
path="/org/freedesktop/UPower/devices/DisplayDevice"
|
||||
echo $(${pkgs.upower}/bin/upower -i $path | grep -o "[0-9]\+%" | tr '%' ' ')
|
||||
''
|
||||
);
|
||||
state = pkgs.writeShellScript "state" (
|
||||
if pkgs.stdenv.isDarwin then
|
||||
''
|
||||
echo $(pmset -g batt | awk '{print $4}')
|
||||
''
|
||||
else
|
||||
''
|
||||
path="/org/freedesktop/UPower/devices/DisplayDevice"
|
||||
echo $(${pkgs.upower}/bin/upower -i $path | grep state | awk '{print $2}')
|
||||
''
|
||||
);
|
||||
icon = pkgs.writeShellScript "icon" ''
|
||||
percentage=$(${percentage})
|
||||
state=$(${state})
|
||||
if [ "$state" == "charging" ] || [ "$state" == "fully-charged" ]; then echo ""
|
||||
elif [ $percentage -ge 75 ]; then echo ""
|
||||
elif [ $percentage -ge 50 ]; then echo ""
|
||||
elif [ $percentage -ge 25 ]; then echo ""
|
||||
elif [ $percentage -ge 0 ]; then echo ""
|
||||
fi
|
||||
'';
|
||||
color = pkgs.writeShellScript "color" ''
|
||||
percentage=$(${percentage})
|
||||
state=$(${state})
|
||||
if [ "$state" == "charging" ] || [ "$state" == "fully-charged" ]; then echo "green"
|
||||
elif [ $percentage -ge 75 ]; then echo "green"
|
||||
elif [ $percentage -ge 50 ]; then echo "${fg2}"
|
||||
elif [ $percentage -ge 30 ]; then echo "yellow"
|
||||
elif [ $percentage -ge 0 ]; then echo "red"
|
||||
fi
|
||||
'';
|
||||
in
|
||||
"#[fg=#(${color})]#(${icon}) #[fg=${fg}]#(${percentage})%";
|
||||
|
||||
pwd =
|
||||
let
|
||||
accent = color "main_accent";
|
||||
icon = "#[fg=${accent}] ";
|
||||
format = "#[fg=${fg}]#{b:pane_current_path}";
|
||||
in
|
||||
"${icon}${format}";
|
||||
|
||||
git =
|
||||
let
|
||||
icon = pkgs.writeShellScript "branch" ''
|
||||
git -C "$1" branch && echo " "
|
||||
'';
|
||||
branch = pkgs.writeShellScript "branch" ''
|
||||
git -C "$1" rev-parse --abbrev-ref HEAD
|
||||
'';
|
||||
in
|
||||
"#[fg=magenta]#(${icon} #{pane_current_path})#(${branch} #{pane_current_path})";
|
||||
|
||||
separator = "#[fg=${fg}]|";
|
||||
in
|
||||
{
|
||||
programs.tmux = {
|
||||
enable = true;
|
||||
baseIndex = 1;
|
||||
escapeTime = 0;
|
||||
mouse = true;
|
||||
extraConfig = ''
|
||||
set-option -sa terminal-overrides ",xterm*:Tc"
|
||||
set-option -g status-position top
|
||||
unbind r
|
||||
bind r source-file ~/.config/tmux/tmux.conf
|
||||
|
||||
# remap prefix from C-b to C-Space
|
||||
# unbind C-b
|
||||
# set -g prefix C-Space
|
||||
# bind C-Space send-prefix
|
||||
|
||||
# split panes using | and -
|
||||
unbind '"'
|
||||
unbind %
|
||||
bind | split-window -h
|
||||
bind - split-window -v
|
||||
|
||||
# Start windows and panes at 1, not 0
|
||||
set -g base-index 1
|
||||
set -g pane-base-index 1
|
||||
set-window-option -g pane-base-index 1
|
||||
set-option -g renumber-windows on
|
||||
|
||||
# switch panes using Alt-arrow without prefix
|
||||
bind -n M-Left select-pane -L
|
||||
bind -n M-Right select-pane -R
|
||||
bind -n M-Up select-pane -U
|
||||
bind -n M-Down select-pane -D
|
||||
|
||||
set-option -g default-terminal "screen-256color"
|
||||
set-option -g status-right-length 100
|
||||
set-option -g @indicator_color "yellow"
|
||||
set-option -g @window_color "magenta"
|
||||
set-option -g @main_accent "blue"
|
||||
set-option -g pane-active-border fg=black
|
||||
set-option -g pane-border-style fg=black
|
||||
set-option -g status-style "bg=${bg} fg=${fg}"
|
||||
set-option -g status-left "${indicator}"
|
||||
set-option -g status-right "${git} ${pwd} ${separator} ${battery}"
|
||||
set-option -g window-status-current-format "${current_window}"
|
||||
set-option -g window-status-format "${window_status}"
|
||||
set-option -g window-status-separator ""
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
9
modules/hm/shell/zoxide.nix
Normal file
9
modules/hm/shell/zoxide.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
flake.modules.homeManager.shell = {
|
||||
programs.zoxide = {
|
||||
enable = true;
|
||||
options = [ "--cmd cd" ];
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
27
modules/hm/shell/zsh.nix
Normal file
27
modules/hm/shell/zsh.nix
Normal file
@@ -0,0 +1,27 @@
|
||||
{ lib, ... }:
|
||||
{
|
||||
flake.modules.homeManager.shell =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
history = {
|
||||
append = true;
|
||||
share = true;
|
||||
expireDuplicatesFirst = true;
|
||||
ignoreDups = true;
|
||||
size = 1000000;
|
||||
save = 1000000;
|
||||
path = "$HOME/.local/share/zsh/.zsh_history";
|
||||
};
|
||||
syntaxHighlighting.enable = true;
|
||||
autosuggestion.enable = true;
|
||||
initContent = ''
|
||||
${lib.getExe pkgs.fastfetch}
|
||||
bindkey "^A" vi-beginning-of-line
|
||||
bindkey "^E" vi-end-of-line
|
||||
bindkey '^R' fzf-history-widget
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
157
modules/hosts/sirius/config.nix
Normal file
157
modules/hosts/sirius/config.nix
Normal file
@@ -0,0 +1,157 @@
|
||||
{
|
||||
flake.modules.nixos.sirius =
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
hostName,
|
||||
userName,
|
||||
userEmail,
|
||||
...
|
||||
}:
|
||||
{
|
||||
# --- Boot ---
|
||||
boot = {
|
||||
loader = {
|
||||
systemd-boot.enable = true;
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
kernelPackages = pkgs.linuxKernel.packages.linux_zen;
|
||||
kernelParams = [ "nvidia-drm.modeset=1" ];
|
||||
};
|
||||
|
||||
# --- Networking ---
|
||||
networking = {
|
||||
hostName = hostName;
|
||||
networkmanager = {
|
||||
enable = true;
|
||||
wifi.backend = "iwd";
|
||||
};
|
||||
wireless.iwd = {
|
||||
enable = true;
|
||||
settings = {
|
||||
Network = {
|
||||
EnableIPv6 = true;
|
||||
};
|
||||
Settings = {
|
||||
AutoConnect = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
firewall.enable = false;
|
||||
};
|
||||
|
||||
# --- Hardware / GPU ---
|
||||
hardware = {
|
||||
graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
};
|
||||
nvidia = {
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
modesetting.enable = true;
|
||||
open = false;
|
||||
nvidiaSettings = true;
|
||||
};
|
||||
|
||||
enableAllFirmware = true;
|
||||
usb-modeswitch.enable = true;
|
||||
};
|
||||
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
# --- Locale ---
|
||||
time.timeZone = "Asia/Kolkata";
|
||||
i18n = {
|
||||
defaultLocale = "en_US.UTF-8";
|
||||
extraLocaleSettings = lib.genAttrs [
|
||||
"LC_ADDRESS"
|
||||
"LC_IDENTIFICATION"
|
||||
"LC_MEASUREMENT"
|
||||
"LC_MONETARY"
|
||||
"LC_NAME"
|
||||
"LC_NUMERIC"
|
||||
"LC_PAPER"
|
||||
"LC_TELEPHONE"
|
||||
"LC_TIME"
|
||||
] (_: "en_IN");
|
||||
};
|
||||
|
||||
# --- Desktop ---
|
||||
services = {
|
||||
displayManager.ly.enable = true;
|
||||
desktopManager.plasma6.enable = true;
|
||||
};
|
||||
|
||||
# --- Fonts ---
|
||||
fonts.packages = with pkgs.nerd-fonts; [
|
||||
fira-code
|
||||
jetbrains-mono
|
||||
bigblue-terminal
|
||||
];
|
||||
|
||||
# --- Audio ---
|
||||
services.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa = {
|
||||
enable = true;
|
||||
support32Bit = true;
|
||||
};
|
||||
pulse.enable = true;
|
||||
};
|
||||
|
||||
# --- SSH ---
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
startWhenNeeded = true;
|
||||
allowSFTP = true;
|
||||
settings = {
|
||||
PermitRootLogin = "no";
|
||||
PasswordAuthentication = false;
|
||||
KbdInteractiveAuthentication = false;
|
||||
AuthenticationMethods = "publickey";
|
||||
PubkeyAuthentication = "yes";
|
||||
UsePAM = false;
|
||||
UseDns = false;
|
||||
X11Forwarding = false;
|
||||
ClientAliveCountMax = 5;
|
||||
ClientAliveInterval = 60;
|
||||
|
||||
KexAlgorithms = [
|
||||
"curve25519-sha256"
|
||||
"curve25519-sha256@libssh.org"
|
||||
"diffie-hellman-group16-sha512"
|
||||
"diffie-hellman-group18-sha512"
|
||||
"sntrup761x25519-sha512@openssh.com"
|
||||
"diffie-hellman-group-exchange-sha256"
|
||||
"mlkem768x25519-sha256"
|
||||
"sntrup761x25519-sha512"
|
||||
];
|
||||
Macs = [
|
||||
"hmac-sha2-512-etm@openssh.com"
|
||||
"hmac-sha2-256-etm@openssh.com"
|
||||
"umac-128-etm@openssh.com"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# --- Programs ---
|
||||
programs.firefox.enable = true;
|
||||
|
||||
# --- Packages ---
|
||||
environment.systemPackages = with pkgs; [
|
||||
neovim
|
||||
discord
|
||||
pciutils
|
||||
brave
|
||||
zed-editor
|
||||
usbutils
|
||||
];
|
||||
|
||||
# !!! DO NOT CHANGE THIS !!!
|
||||
# This should match the version used at initial install.
|
||||
system.stateVersion = "26.05";
|
||||
};
|
||||
}
|
||||
23
modules/hosts/sirius/default.nix
Normal file
23
modules/hosts/sirius/default.nix
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
inputs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
let
|
||||
hostName = "sirius";
|
||||
userName = "tux";
|
||||
userEmail = "t@tux.rs";
|
||||
system = "x86_64-linux";
|
||||
unstable = true;
|
||||
nixpkgs = if unstable then inputs.nixpkgs else inputs.nixpkgs-stable;
|
||||
in
|
||||
{
|
||||
flake.nixosConfigurations."${hostName}" = nixpkgs.lib.nixosSystem {
|
||||
inherit system;
|
||||
specialArgs = { inherit hostName userName userEmail; };
|
||||
modules = [
|
||||
config.flake.modules.nixos.core
|
||||
config.flake.modules.nixos.${hostName}
|
||||
];
|
||||
};
|
||||
}
|
||||
48
modules/hosts/sirius/hardware.nix
Normal file
48
modules/hosts/sirius/hardware.nix
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
flake.modules.nixos.sirius =
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
boot.initrd.availableKernelModules = [
|
||||
"nvme"
|
||||
"xhci_pci"
|
||||
"ahci"
|
||||
"usbhid"
|
||||
"usb_storage"
|
||||
"sd_mod"
|
||||
];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/d856ed98-6841-4cbf-89be-e08c6f48b9ea";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/7FE1-55C5";
|
||||
fsType = "vfat";
|
||||
options = [
|
||||
"fmask=0077"
|
||||
"dmask=0077"
|
||||
];
|
||||
};
|
||||
|
||||
swapDevices = [ { device = "/dev/disk/by-uuid/69794aa5-51a9-4816-8d45-7791505165d4"; } ];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.wlp10s0f3u2i2.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
};
|
||||
}
|
||||
24
modules/hosts/sirius/home.nix
Normal file
24
modules/hosts/sirius/home.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
flake.modules.homeManager.sirius = {
|
||||
imports = with config.flake.modules.homeManager; [
|
||||
desktop
|
||||
];
|
||||
|
||||
tnix.services.lan-mouse = {
|
||||
enable = true;
|
||||
settings = {
|
||||
clients = [
|
||||
{
|
||||
position = "right";
|
||||
hostname = "canopus";
|
||||
activate_on_startup = true;
|
||||
ips = [ "192.168.8.2" ];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
home.stateVersion = "26.05";
|
||||
};
|
||||
}
|
||||
37
modules/nixos/core/hm.nix
Normal file
37
modules/nixos/core/hm.nix
Normal file
@@ -0,0 +1,37 @@
|
||||
{ inputs, config, ... }:
|
||||
{
|
||||
flake.modules.nixos.core =
|
||||
{
|
||||
hostName,
|
||||
userName,
|
||||
userEmail,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
];
|
||||
|
||||
home-manager = {
|
||||
backupFileExtension = "bak";
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
extraSpecialArgs = {
|
||||
inherit
|
||||
inputs
|
||||
hostName
|
||||
userName
|
||||
userEmail
|
||||
;
|
||||
};
|
||||
|
||||
users.${userName} = {
|
||||
imports = [
|
||||
config.flake.modules.homeManager.core
|
||||
config.flake.modules.homeManager.shell
|
||||
config.flake.modules.homeManager.${hostName}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
20
modules/nixos/core/nh.nix
Normal file
20
modules/nixos/core/nh.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
flake.modules.nixos.core =
|
||||
{
|
||||
config,
|
||||
userName,
|
||||
...
|
||||
}:
|
||||
{
|
||||
programs.nh = {
|
||||
enable = true;
|
||||
|
||||
clean = {
|
||||
enable = !config.nix.gc.automatic;
|
||||
dates = "weekly";
|
||||
};
|
||||
|
||||
flake = "/home/${userName}/Projects/nixos-config";
|
||||
};
|
||||
};
|
||||
}
|
||||
83
modules/nixos/core/nix.nix
Normal file
83
modules/nixos/core/nix.nix
Normal file
@@ -0,0 +1,83 @@
|
||||
{
|
||||
flake.modules.nixos.core =
|
||||
{ userName, ... }:
|
||||
{
|
||||
nix = {
|
||||
channel.enable = false;
|
||||
|
||||
gc = {
|
||||
automatic = true;
|
||||
options = "--delete-older-than 7d";
|
||||
dates = "weekly";
|
||||
persistent = true;
|
||||
};
|
||||
|
||||
optimise.automatic = true;
|
||||
|
||||
settings = {
|
||||
experimental-features = [
|
||||
"nix-command"
|
||||
"flakes"
|
||||
];
|
||||
|
||||
max-jobs = "auto";
|
||||
|
||||
# Make legacy nix commands use the XDG base directories instead of creating directories in $HOME.
|
||||
use-xdg-base-directories = true;
|
||||
|
||||
# The maximum number of parallel TCP connections used to fetch files from binary caches and by other downloads.
|
||||
# It defaults to 25. 0 means no limit.
|
||||
http-connections = 128;
|
||||
|
||||
# This option defines the maximum number of substitution jobs that Nix will try to run in
|
||||
# parallel. The default is 16. The minimum value one can choose is 1 and lower values will be
|
||||
# interpreted as 1.
|
||||
max-substitution-jobs = 128;
|
||||
|
||||
# The number of lines of the tail of the log to show if a build fails.
|
||||
log-lines = 25;
|
||||
|
||||
# When free disk space in /nix/store drops below min-free during a build, Nix performs a
|
||||
# garbage-collection until max-free bytes are available or there is no more garbage.
|
||||
# A value of 0 (the default) disables this feature.
|
||||
min-free = 128000000; # 128 MB
|
||||
max-free = 1000000000; # 1 GB
|
||||
|
||||
# Prevent garbage collection from altering nix-shells managed by nix-direnv
|
||||
# https://github.com/nix-community/nix-direnv#installation
|
||||
keep-outputs = true;
|
||||
keep-derivations = true;
|
||||
|
||||
# If set to true, Nix will keep building derivations even if some fail. The default is false.
|
||||
keep-going = true;
|
||||
|
||||
# Automatically detect files in the store that have identical contents, and replaces
|
||||
# them with hard links to a single copy. This saves disk space.
|
||||
auto-optimise-store = true;
|
||||
|
||||
# Whether to warn about dirty Git/Mercurial trees.
|
||||
warn-dirty = false;
|
||||
|
||||
# The timeout (in seconds) for establishing connections in the binary cache substituter.
|
||||
# It corresponds to curl’s –connect-timeout option. A value of 0 means no limit.
|
||||
connect-timeout = 5;
|
||||
|
||||
# Allow the use of cachix
|
||||
trusted-users = [
|
||||
"root"
|
||||
"${userName}"
|
||||
];
|
||||
allowed-users = [
|
||||
"root"
|
||||
"${userName}"
|
||||
];
|
||||
|
||||
builders-use-substitutes = true;
|
||||
|
||||
# If set to true, Nix will fall back to building from source if a binary substitute
|
||||
# fails. This is equivalent to the –fallback flag. The default is false.
|
||||
fallback = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
12
modules/nixos/core/nixpkgs.nix
Normal file
12
modules/nixos/core/nixpkgs.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{ inputs, ... }:
|
||||
{
|
||||
flake.modules.nixos.core = {
|
||||
nixpkgs = {
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
joypixels.acceptLicense = true;
|
||||
};
|
||||
overlays = builtins.attrValues inputs.self.overlays;
|
||||
};
|
||||
};
|
||||
}
|
||||
9
modules/nixos/core/security.nix
Normal file
9
modules/nixos/core/security.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
flake.modules.nixos.core =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
security = {
|
||||
sudo.wheelNeedsPassword = false;
|
||||
};
|
||||
};
|
||||
}
|
||||
31
modules/nixos/core/substituters.nix
Normal file
31
modules/nixos/core/substituters.nix
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
flake.modules.nixos.core = {
|
||||
nix.settings = {
|
||||
substituters = [
|
||||
"https://cache.nixos.org?priority=10"
|
||||
"https://anyrun.cachix.org"
|
||||
"https://fufexan.cachix.org"
|
||||
"https://helix.cachix.org"
|
||||
"https://hyprland.cachix.org"
|
||||
"https://nix-community.cachix.org"
|
||||
"https://nix-gaming.cachix.org"
|
||||
"https://yazi.cachix.org"
|
||||
"https://nix-on-droid.cachix.org"
|
||||
"https://lan-mouse.cachix.org"
|
||||
];
|
||||
trusted-substituters = [ "https://nix-on-droid.cachix.org" ];
|
||||
trusted-public-keys = [
|
||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||
"anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
|
||||
"fufexan.cachix.org-1:LwCDjCJNJQf5XD2BV+yamQIMZfcKWR9ISIFy5curUsY="
|
||||
"helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs="
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="
|
||||
"yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k="
|
||||
"nix-on-droid.cachix.org-1:56snoMJTXmDRC1Ei24CmKoUqvHJ9XCp+nidK7qkMQrU="
|
||||
"lan-mouse.cachix.org-1:KlE2AEZUgkzNKM7BIzMQo8w9yJYqUpor1CAUNRY6OyM="
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/nixos/core/users.nix
Normal file
29
modules/nixos/core/users.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
flake.modules.nixos.core =
|
||||
{
|
||||
pkgs,
|
||||
userName,
|
||||
userEmail,
|
||||
...
|
||||
}:
|
||||
{
|
||||
programs.zsh.enable = true;
|
||||
|
||||
users = {
|
||||
mutableUsers = false;
|
||||
defaultUserShell = pkgs.zsh;
|
||||
users.${userName} = {
|
||||
initialPassword = userName;
|
||||
isNormalUser = true;
|
||||
extraGroups = [
|
||||
"networkmanager"
|
||||
"wheel"
|
||||
"storage"
|
||||
];
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL+OzPUe2ECPC929DqpkM39tl/vdNAXfsRnmrGfR+X3D ${userEmail}"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user