28 Commits

Author SHA1 Message Date
Hadi 1b2dcfc20a scroll and center
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-08-21 18:32:47 +02:00
Hadi af19b9f1b7 edit usbguard rules
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-08-21 18:32:47 +02:00
Hadi c8f02ec056 Update flake
Signed-off-by: Hadi <hadi@example.fr>
2026-08-21 14:58:16 +02:00
Hadi 3bd0a45538 add navi
Signed-off-by: Hadi <hadi@example.fr>
2026-08-21 14:52:54 +02:00
Hadi cb74a5744f Hardening: Vulnix + kernel hardening
Signed-off-by: Hadi <hadi@example.fr>
2026-08-21 14:38:47 +02:00
Hadi 4e016613cd new rules
Signed-off-by: Hadi <hadi@example.fr>
2026-08-21 14:34:38 +02:00
Hadi 688bd920de add border layout style
Signed-off-by: Hadi <hadi@example.fr>
2026-08-21 11:18:11 +02:00
Hadi b747c7c359 add grace
Signed-off-by: Hadi <hadi@example.fr>
2026-08-21 11:18:02 +02:00
Hadi 445829e365 update rules
Signed-off-by: Hadi <hadi@example.fr>
2026-08-21 10:05:20 +02:00
Hadi bb054e7e8d add nerdfonts and border
Signed-off-by: Hadi <hadi@example.fr>
2026-08-20 15:19:54 +02:00
Hadi eb7cea567c change disk id
Signed-off-by: Hadi <hadi@example.fr>
2026-08-19 15:50:28 +02:00
Hadi 8654da046c change hyprlock config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-08-17 22:24:34 +02:00
Hadi f56bf4402c stirlingpdf -> bentopdf
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 15:18:37 +02:00
Hadi 6953622559 update server conf
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 15:06:33 +02:00
Hadi 5076c244db mkIf impermanence
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 14:57:11 +02:00
Hadi 9a3fa6f4a9 add wl-clipboard
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 14:37:48 +02:00
Hadi 735cd50059 Add recipient
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 14:21:36 +02:00
Hadi 663439dcdf change passphrase
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 14:20:08 +02:00
Hadi 61ecbdb8d3 add python to dev deps
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 14:15:16 +02:00
Hadi 3f67868830 use the system's font
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 14:15:09 +02:00
Hadi a50e14d04c chmod secrets
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 14:14:54 +02:00
Hadi 40dea7c9bc container use the local DNS
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 14:14:47 +02:00
Hadi 6a2adfb338 change import script
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 14:14:01 +02:00
Hadi 2affa2a8ec rebase
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 14:13:41 +02:00
Hadi 60d850c2bc change work password
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 13:10:50 +02:00
Hadi 5d0ef403e3 update the wallpaper url & hash
Signed-off-by: Hadi <hadi@example.fr>
2026-08-17 11:47:52 +02:00
Hadi ac008183bd add the flake to work
Signed-off-by: Hadi <hadi@example.com>
2026-08-17 11:00:37 +02:00
Hadi a4b07fa578 add work's conf
Signed-off-by: Hadi <hadi@example.com>
2026-08-17 10:49:37 +02:00
54 changed files with 809 additions and 607 deletions
+5
View File
@@ -10,3 +10,8 @@ creation_rules:
key_groups: key_groups:
- age: - age:
- *primary - *primary
- path_regex: hosts/work/secrets/secrets.yaml$
key_groups:
- age:
- *work
- *primary
Generated
+51 -293
View File
@@ -1,24 +1,5 @@
{ {
"nodes": { "nodes": {
"awesome-wallpapers": {
"inputs": {
"git-hooks": "git-hooks",
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1786698894,
"narHash": "sha256-yZHP8Tqn/ClxwGCTsZnyT5HRFGRY0eeMWtlK43qJbtc=",
"owner": "anotherhadi",
"repo": "awesome-wallpapers",
"rev": "deda1a9868be6f516405115068f3ed5038395340",
"type": "github"
},
"original": {
"owner": "anotherhadi",
"repo": "awesome-wallpapers",
"type": "github"
}
},
"base16": { "base16": {
"inputs": { "inputs": {
"fromYaml": "fromYaml" "fromYaml": "fromYaml"
@@ -90,7 +71,7 @@
"blog": { "blog": {
"inputs": { "inputs": {
"bun2nix": "bun2nix", "bun2nix": "bun2nix",
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1780522780, "lastModified": 1780522780,
@@ -156,35 +137,10 @@
"type": "github" "type": "github"
} }
}, },
"bun2nix_3": {
"inputs": {
"flake-parts": "flake-parts_3",
"import-tree": "import-tree_3",
"nixpkgs": [
"iknowyou",
"nixpkgs"
],
"systems": "systems_3",
"treefmt-nix": "treefmt-nix_3"
},
"locked": {
"lastModified": 1770895533,
"narHash": "sha256-v3QaK9ugy9bN9RXDnjw0i2OifKmz2NnKM82agtqm/UY=",
"owner": "nix-community",
"repo": "bun2nix",
"rev": "c843f477b15f51151f8c6bcc886954699440a6e1",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "bun2nix",
"type": "github"
}
},
"default-creds": { "default-creds": {
"inputs": { "inputs": {
"bun2nix": "bun2nix_2", "bun2nix": "bun2nix_2",
"nixpkgs": "nixpkgs_3" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1780323652, "lastModified": 1780323652,
@@ -253,22 +209,6 @@
} }
}, },
"flake-compat_2": { "flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1777699697, "lastModified": 1777699697,
@@ -321,24 +261,6 @@
} }
}, },
"flake-parts_3": { "flake-parts_3": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib_3"
},
"locked": {
"lastModified": 1769996383,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_4": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"nur", "nur",
@@ -359,7 +281,7 @@
"type": "github" "type": "github"
} }
}, },
"flake-parts_5": { "flake-parts_4": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"stylix", "stylix",
@@ -399,28 +321,6 @@
"git-hooks": { "git-hooks": {
"inputs": { "inputs": {
"flake-compat": "flake-compat", "flake-compat": "flake-compat",
"nixpkgs": [
"awesome-wallpapers",
"nixpkgs"
]
},
"locked": {
"lastModified": 1784288435,
"narHash": "sha256-ReRHaLgr/uVqdD8afFSn+myXIfpHeOhP0yYe0TJqAA8=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "43b3c1ab9d40fb1dbb008f451988a91e375825e9",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"git-hooks_2": {
"inputs": {
"flake-compat": "flake-compat_2",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
@@ -463,11 +363,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1786621994, "lastModified": 1787301512,
"narHash": "sha256-ygaOQQFGv3QHcNMoGBor22Dm5GouzmwYucrUfX6oTxQ=", "narHash": "sha256-VYbNaWAcwK9G+mq3jmqyCu6t4zUNUOTT8PXB3pj7XgA=",
"owner": "oxcl", "owner": "oxcl",
"repo": "nix-flake-helium-browser", "repo": "nix-flake-helium-browser",
"rev": "810640b8a7aa504d3962ec8bb857f8252aad6547", "rev": "4fe9ac832466143224203f896a3a38aa8c73b611",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -483,11 +383,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1785119570, "lastModified": 1787146702,
"narHash": "sha256-Rgs2xKnGLFWQscxUaXX07oyZeuMDOHEbqDOsgliLFGM=", "narHash": "sha256-YbRcLdU/yK4gWsQg7V8WTKZHfXL33g8+wSFUX3wyevs=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "d4fd24667c8cbef124bb70a20380cab75ec8474d", "rev": "173b7e8d40fdc8c296a9c99854314f17a3a1704c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -518,30 +418,10 @@
"type": "github" "type": "github"
} }
}, },
"iknowyou": {
"inputs": {
"bun2nix": "bun2nix_3",
"nixpkgs": "nixpkgs_4",
"nur-osint": "nur-osint"
},
"locked": {
"lastModified": 1779949739,
"narHash": "sha256-axo7EprQSm8yYL4P6Ye9EZGEz/bdh8HHkmBlRIQzzvM=",
"owner": "anotherhadi",
"repo": "iknowyou",
"rev": "bb778b43747b7e703e2c311a898198c4a89ac12a",
"type": "github"
},
"original": {
"owner": "anotherhadi",
"repo": "iknowyou",
"type": "github"
}
},
"impermanence": { "impermanence": {
"inputs": { "inputs": {
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"nixpkgs": "nixpkgs_5" "nixpkgs": "nixpkgs_3"
}, },
"locked": { "locked": {
"lastModified": 1769548169, "lastModified": 1769548169,
@@ -587,21 +467,6 @@
"type": "github" "type": "github"
} }
}, },
"import-tree_3": {
"locked": {
"lastModified": 1763762820,
"narHash": "sha256-ZvYKbFib3AEwiNMLsejb/CWs/OL/srFQ8AogkebEPF0=",
"owner": "vic",
"repo": "import-tree",
"rev": "3c23749d8013ec6daa1d7255057590e9ca726646",
"type": "github"
},
"original": {
"owner": "vic",
"repo": "import-tree",
"type": "github"
}
},
"mnw": { "mnw": {
"locked": { "locked": {
"lastModified": 1780772958, "lastModified": 1780772958,
@@ -624,11 +489,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1786249295, "lastModified": 1786852476,
"narHash": "sha256-Y2mSr+HLKYoOsjiackgilxkHXe8gkJ3z4hFFekjQX3I=", "narHash": "sha256-IM5CYtf86W4w8eUPpKcY/LpdHElmVBtJhaKnoTKxZEA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-index-database", "repo": "nix-index-database",
"rev": "14d55b8069119e3b88da7aa2f6c97f86a2cd3cd6", "rev": "c7962dc97b45129df8d751bedaf37beb5a17706e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -639,35 +504,35 @@
}, },
"nixarr": { "nixarr": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_6", "nixpkgs": "nixpkgs_4",
"treefmt-nix": "treefmt-nix_4", "treefmt-nix": "treefmt-nix_3",
"vpnconfinement": "vpnconfinement", "vpnconfinement": "vpnconfinement",
"website-builder": "website-builder" "website-builder": "website-builder"
}, },
"locked": { "locked": {
"lastModified": 1784997863, "lastModified": 1784997863,
"narHash": "sha256-oTMag4I9MW3bstuOKqzc0F1OqxO49lLa9jkSkRe3EqA=", "narHash": "sha256-oTMag4I9MW3bstuOKqzc0F1OqxO49lLa9jkSkRe3EqA=",
"owner": "rasmus-kirk", "owner": "nix-media-server",
"repo": "nixarr", "repo": "nixarr",
"rev": "282ce99b31d52d72cca281e3d26d3dd267946800", "rev": "282ce99b31d52d72cca281e3d26d3dd267946800",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "rasmus-kirk", "owner": "nix-media-server",
"repo": "nixarr", "repo": "nixarr",
"type": "github" "type": "github"
} }
}, },
"nixos-hardware": { "nixos-hardware": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_7" "nixpkgs": "nixpkgs_5"
}, },
"locked": { "locked": {
"lastModified": 1786528975, "lastModified": 1787144466,
"narHash": "sha256-8KuasCs+mVQ7WbLONUf/QB7NZeQvovyXRyxAj4nOOzY=", "narHash": "sha256-HHfv2/HkNSKbbSyU9iD/g8lbP6r4tl33sSw1W4rXCk0=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "3e7edd9afe17e45521300e041c65de3015f4a302", "rev": "0471accf8d0a8210b31d947497d179ecc99e0021",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -678,16 +543,16 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1786535285, "lastModified": 1776548001,
"narHash": "sha256-rG5HKMAgAhMgydvKGtco6rqTxRq4EDZQCx9USLvVqYw=", "narHash": "sha256-ZSK0NL4a1BwVbbTBoSnWgbJy9HeZFXLYQizjb2DPF24=",
"owner": "nixos", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9f78f44a87948854445dae0b6bf82b2e87e4efb5", "rev": "b12141ef619e0a9c1c84dc8c684040326f27cdcc",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "NixOS",
"ref": "nixos-26.05", "ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
@@ -722,28 +587,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-lib_3": {
"locked": {
"lastModified": 1769909678,
"narHash": "sha256-cBEymOf4/o3FD5AZnzC3J9hLbiZ+QDT/KDuyHXVJOpM=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "72716169fe93074c333e8d0173151350670b824c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1786599213, "lastModified": 1787135253,
"narHash": "sha256-yNJd40f11EzXBjSByCB7IPpeFFAdeoSKKM67dGkfFoU=", "narHash": "sha256-RD2kNWCG+Bjo6h+JVjWVNntZs2GtRoeY2xHjts/FNkA=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "0e251e24a4f24e036a084b6b4b2d2491af4167f4", "rev": "ffb3c9b700e759be2ef13237c9d8f953b32a1e46",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -754,22 +604,6 @@
} }
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": {
"lastModified": 1776548001,
"narHash": "sha256-ZSK0NL4a1BwVbbTBoSnWgbJy9HeZFXLYQizjb2DPF24=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "b12141ef619e0a9c1c84dc8c684040326f27cdcc",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1772773019, "lastModified": 1772773019,
"narHash": "sha256-E1bxHxNKfDoQUuvriG71+f+s/NT0qWkImXsYZNFFfCs=", "narHash": "sha256-E1bxHxNKfDoQUuvriG71+f+s/NT0qWkImXsYZNFFfCs=",
@@ -785,23 +619,7 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_4": { "nixpkgs_3": {
"locked": {
"lastModified": 1775710090,
"narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "4c1018dae018162ec878d42fec712642d214fdfa",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1768564909, "lastModified": 1768564909,
"narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=", "narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
@@ -817,7 +635,7 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_6": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1775595990, "lastModified": 1775595990,
"narHash": "sha256-OEf7YqhF9IjJFYZJyuhAypgU+VsRB5lD4DuiMws5Ltc=", "narHash": "sha256-OEf7YqhF9IjJFYZJyuhAypgU+VsRB5lD4DuiMws5Ltc=",
@@ -833,7 +651,7 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_7": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1767892417, "lastModified": 1767892417,
"narHash": "sha256-8bW3q88CEg2u4hSP66Vf4lpbLonHz7hqDNBMcCY7E9U=", "narHash": "sha256-8bW3q88CEg2u4hSP66Vf4lpbLonHz7hqDNBMcCY7E9U=",
@@ -846,13 +664,13 @@
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
} }
}, },
"nixpkgs_8": { "nixpkgs_6": {
"locked": { "locked": {
"lastModified": 1786535285, "lastModified": 1787204541,
"narHash": "sha256-rG5HKMAgAhMgydvKGtco6rqTxRq4EDZQCx9USLvVqYw=", "narHash": "sha256-OURZPknrTjQrlNyxPdqzyqmU/81Wes1CUP/Ft1Rv/YI=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9f78f44a87948854445dae0b6bf82b2e87e4efb5", "rev": "5880666fd9eb563038431edb35c2d0aa595884e6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -862,7 +680,7 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_9": { "nixpkgs_7": {
"locked": { "locked": {
"lastModified": 1784796856, "lastModified": 1784796856,
"narHash": "sha256-vwxWgF+Gj276WznzGb1LxGsK/39HaQwgQXiU3EkC844=", "narHash": "sha256-vwxWgF+Gj276WznzGb1LxGsK/39HaQwgQXiU3EkC844=",
@@ -877,17 +695,17 @@
}, },
"nur": { "nur": {
"inputs": { "inputs": {
"flake-parts": "flake-parts_4", "flake-parts": "flake-parts_3",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1786700839, "lastModified": 1787315761,
"narHash": "sha256-DtB4Byceo3tyyZNsmwuM0YZSO76VaUaGMSxVjdwYQyw=", "narHash": "sha256-1ze3fFnH7GhN6P3e76Ved2OGNLU/r1Pgo59TbPi9Pg8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nur", "repo": "nur",
"rev": "3c7c14b16718033c171babfd3020006c05d724d8", "rev": "9fd3c9b18edddb6c611fcbee9974d3b6de5443a7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -896,27 +714,6 @@
"type": "github" "type": "github"
} }
}, },
"nur-osint": {
"inputs": {
"nixpkgs": [
"iknowyou",
"nixpkgs"
]
},
"locked": {
"lastModified": 1775935554,
"narHash": "sha256-7StMiQf3HSBruAxZ2/ZYJhhNEp1KbglGVijQBrurqiM=",
"owner": "anotherhadi",
"repo": "nur-osint",
"rev": "460e377522a43d3d968be20bec2cf40a72013904",
"type": "github"
},
"original": {
"owner": "anotherhadi",
"repo": "nur-osint",
"type": "github"
}
},
"nur_2": { "nur_2": {
"inputs": { "inputs": {
"flake-parts": [ "flake-parts": [
@@ -944,16 +741,16 @@
}, },
"nvf": { "nvf": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_3", "flake-compat": "flake-compat_2",
"mnw": "mnw", "mnw": "mnw",
"nixpkgs": "nixpkgs_9" "nixpkgs": "nixpkgs_7"
}, },
"locked": { "locked": {
"lastModified": 1786433999, "lastModified": 1787305329,
"narHash": "sha256-rbOp2g0UCYt+evTnCGCKBQGqSMfwX4RTXneNbeHqOAk=", "narHash": "sha256-nYA+0kCn0h0dsaApPWuSJwIlBrPchqJphnfGLzDCOFs=",
"owner": "notashelf", "owner": "notashelf",
"repo": "nvf", "repo": "nvf",
"rev": "a213644cadd5f90bf18b0c409f08f282b30e55e3", "rev": "93cb00e768908ba77f64a846f487e43e79130796",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -983,19 +780,17 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"awesome-wallpapers": "awesome-wallpapers",
"blog": "blog", "blog": "blog",
"default-creds": "default-creds", "default-creds": "default-creds",
"disko": "disko", "disko": "disko",
"git-hooks": "git-hooks_2", "git-hooks": "git-hooks",
"helium-browser": "helium-browser", "helium-browser": "helium-browser",
"home-manager": "home-manager", "home-manager": "home-manager",
"iknowyou": "iknowyou",
"impermanence": "impermanence", "impermanence": "impermanence",
"nix-index-database": "nix-index-database", "nix-index-database": "nix-index-database",
"nixarr": "nixarr", "nixarr": "nixarr",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_8", "nixpkgs": "nixpkgs_6",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"nur": "nur", "nur": "nur",
"nvf": "nvf", "nvf": "nvf",
@@ -1031,13 +826,13 @@
"base16-helix": "base16-helix", "base16-helix": "base16-helix",
"base16-vim": "base16-vim", "base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme", "firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts_5", "flake-parts": "flake-parts_4",
"gnome-shell": "gnome-shell", "gnome-shell": "gnome-shell",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
"nur": "nur_2", "nur": "nur_2",
"systems": "systems_4", "systems": "systems_3",
"tinted-kitty": "tinted-kitty", "tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes", "tinted-schemes": "tinted-schemes",
"tinted-tmux": "tinted-tmux", "tinted-tmux": "tinted-tmux",
@@ -1103,21 +898,6 @@
"type": "github" "type": "github"
} }
}, },
"systems_4": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tinted-kitty": { "tinted-kitty": {
"flake": false, "flake": false,
"locked": { "locked": {
@@ -1227,28 +1007,6 @@
} }
}, },
"treefmt-nix_3": { "treefmt-nix_3": {
"inputs": {
"nixpkgs": [
"iknowyou",
"bun2nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1770228511,
"narHash": "sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD+Fyxk=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "337a4fe074be1042a35086f15481d763b8ddc0e7",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"treefmt-nix_4": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixarr", "nixarr",
+2 -3
View File
@@ -50,11 +50,9 @@
}; };
# Server # Server
nixarr.url = "github:rasmus-kirk/nixarr"; nixarr.url = "github:nix-media-server/nixarr";
default-creds.url = "github:anotherhadi/default-creds"; default-creds.url = "github:anotherhadi/default-creds";
blog.url = "github:anotherhadi/blog"; blog.url = "github:anotherhadi/blog";
awesome-wallpapers.url = "github:anotherhadi/awesome-wallpapers";
iknowyou.url = "github:anotherhadi/iknowyou";
}; };
outputs = inputs @ { outputs = inputs @ {
@@ -93,6 +91,7 @@
apps.${system}.nvim = inputs.nvf-config.apps.${system}.nvim; apps.${system}.nvim = inputs.nvf-config.apps.${system}.nvim;
nixosConfigurations = { nixosConfigurations = {
h-laptop = import ./hosts/laptop/flake.nix args; h-laptop = import ./hosts/laptop/flake.nix args;
h-work = import ./hosts/work/flake.nix args;
jack = import ./hosts/server/flake.nix args; jack = import ./hosts/server/flake.nix args;
}; };
devShells = forAllSystems (system: pkgs: { devShells = forAllSystems (system: pkgs: {
+11 -4
View File
@@ -1,4 +1,9 @@
{pkgs, ...}: { {
pkgs,
config,
lib,
...
}: {
home.packages = import ./cybersecurity-packages.nix { home.packages = import ./cybersecurity-packages.nix {
inherit pkgs; inherit pkgs;
}; };
@@ -38,7 +43,9 @@
}; };
}; };
home.persistence."/persist".directories = [ home.persistence."/persist" = lib.mkIf (config.var.impermanenceEnabled or false) {
"Cyber" directories = [
]; "Cyber"
];
};
} }
+3 -1
View File
@@ -1,6 +1,8 @@
{ {
pkgs, pkgs,
pkgs-unstable, pkgs-unstable,
config,
lib,
... ...
}: { }: {
home = { home = {
@@ -19,7 +21,7 @@
rsync rsync
]); ]);
persistence."/persist" = { persistence."/persist" = lib.mkIf (config.var.impermanenceEnabled or false) {
directories = [ directories = [
".claude" ".claude"
]; ];
+5 -3
View File
@@ -137,7 +137,9 @@ in {
mimeType = ["text/html" "text/xml" "application/xhtml+xml"]; mimeType = ["text/html" "text/xml" "application/xhtml+xml"];
}; };
home.persistence."/persist".directories = [ home.persistence."/persist" = lib.mkIf (config.var.impermanenceEnabled or false) {
".config/net.imput.helium" directories = [
]; ".config/net.imput.helium"
];
};
} }
+13 -6
View File
@@ -1,4 +1,9 @@
{pkgs, ...}: { {
pkgs,
config,
lib,
...
}: {
home.packages = with pkgs; [ home.packages = with pkgs; [
vlc # Video player vlc # Video player
obsidian # Note taking app obsidian # Note taking app
@@ -13,9 +18,11 @@
gnome-text-editor gnome-text-editor
]; ];
home.persistence."/persist".directories = [ home.persistence."/persist" = lib.mkIf (config.var.impermanenceEnabled or false) {
".config/ticktick" directories = [
".config/Signal" ".config/ticktick"
".config/obsidian" ".config/Signal"
]; ".config/obsidian"
];
};
} }
+7 -4
View File
@@ -1,6 +1,7 @@
{ {
pkgs, pkgs,
config, config,
lib,
... ...
}: { }: {
home.packages = with pkgs; [ home.packages = with pkgs; [
@@ -28,8 +29,10 @@
}; };
}; };
home.persistence."/persist".directories = [ home.persistence."/persist" = lib.mkIf (config.var.impermanenceEnabled or false) {
".config/protonvpn" directories = [
".config/Proton Pass" ".config/protonvpn"
]; ".config/Proton Pass"
];
};
} }
+1 -2
View File
@@ -24,11 +24,10 @@ in {
user.name = username; user.name = username;
user.email = email; user.email = email;
init.defaultBranch = "main"; init.defaultBranch = "main";
pull.rebase = "false"; pull.rebase = "true";
push.autoSetupRemote = true; push.autoSetupRemote = true;
color.ui = "1"; color.ui = "1";
alias = { alias = {
essa = "push --force";
co = "checkout"; co = "checkout";
fuck = "commit --amend -m"; fuck = "commit --amend -m";
c = "commit -m"; c = "commit -m";
+3
View File
@@ -2,6 +2,9 @@
c = config.lib.stylix.colors; c = config.lib.stylix.colors;
in { in {
home.file.".config/ilovetui/config.yaml".text = '' home.file.".config/ilovetui/config.yaml".text = ''
nerd_fonts: true
border: rounded
layout_border: full
colors: colors:
base00: "#${c.base00}" # Background base00: "#${c.base00}" # Background
base01: "#${c.base01}" # Lighter Background / Status Bars base01: "#${c.base01}" # Lighter Background / Status Bars
+5
View File
@@ -0,0 +1,5 @@
{
programs.navi = {
enable = true;
};
}
+22
View File
@@ -207,6 +207,28 @@
desc = "Dedent and keep selection"; desc = "Dedent and keep selection";
} }
# Scroll and center
{
key = "<C-d>";
mode = [
"n"
"v"
];
silent = true;
action = "<C-d>zz";
desc = "Scroll down and center";
}
{
key = "<C-u>";
mode = [
"n"
"v"
];
silent = true;
action = "<C-u>zz";
desc = "Scroll up and center";
}
# Move # Move
{ {
key = "<C-h>"; key = "<C-h>";
+5 -1
View File
@@ -1,6 +1,8 @@
{ {
pkgs, pkgs,
pkgs-unstable, pkgs-unstable,
config,
lib,
... ...
}: { }: {
home.packages = with pkgs; [ home.packages = with pkgs; [
@@ -38,5 +40,7 @@
smassh # typing test, 10fastfinger like smassh # typing test, 10fastfinger like
]; ];
home.persistence."/persist".directories = [".config/gh" ".config/gh-dash"]; home.persistence."/persist" = lib.mkIf (config.var.impermanenceEnabled or false) {
directories = [".config/gh" ".config/gh-dash"];
};
} }
+3 -1
View File
@@ -15,7 +15,9 @@
COLORTERM = "truecolor"; COLORTERM = "truecolor";
MANPAGER = "bat -l man -p"; MANPAGER = "bat -l man -p";
}; };
persistence."/persist".files = [".zsh_history"]; persistence."/persist" = lib.mkIf (config.var.impermanenceEnabled or false) {
files = [".zsh_history"];
};
}; };
programs.zsh = { programs.zsh = {
+4 -1
View File
@@ -2,6 +2,7 @@
{ {
config, config,
pkgs, pkgs,
lib,
... ...
}: let }: let
c = config.lib.stylix.colors; c = config.lib.stylix.colors;
@@ -11,7 +12,9 @@ in {
spotatui spotatui
]; ];
home.persistence."/persist".directories = [".config/spotatui" ".config/spotify"]; home.persistence."/persist" = lib.mkIf (config.var.impermanenceEnabled or false) {
directories = [".config/spotatui" ".config/spotify"];
};
home.file.".config/spotatui/config.yml".text = '' home.file.".config/spotatui/config.yml".text = ''
keybindings: keybindings:
+2
View File
@@ -3,6 +3,8 @@
# script (tofi). Uses the home-manager module so the watcher services are # script (tofi). Uses the home-manager module so the watcher services are
# managed the same way as swaync/hypridle. # managed the same way as swaync/hypridle.
{pkgs, ...}: { {pkgs, ...}: {
home.packages = [pkgs.wl-clipboard];
services.cliphist = { services.cliphist = {
enable = true; enable = true;
allowImages = true; allowImages = true;
+1 -1
View File
@@ -2,10 +2,10 @@
pkgs, pkgs,
lib, lib,
config, config,
scripts,
... ...
}: let }: let
colors = config.lib.stylix.colors; colors = config.lib.stylix.colors;
scripts = import ../waybar/scripts.nix {inherit pkgs config;};
border-size = config.theme.border-size; border-size = config.theme.border-size;
mkMenu = menu: let mkMenu = menu: let
+128 -42
View File
@@ -1,11 +1,75 @@
{config, ...}: let {
config,
lib,
pkgs,
...
}: let
c = config.lib.stylix.colors; c = config.lib.stylix.colors;
font = config.stylix.fonts.monospace.name;
fontSize = 16;
em = fontSize * 4.0 / 3.0;
charW = em * 0.6;
lineH = em * 1.32;
round = x: builtins.floor (x + 0.5);
px = x: toString (round x);
paint = color: t: ''<span foreground="#${color}">${t}</span>'';
fromFile = name: text: ''cmd[update:0] cat ${pkgs.writeText name text}'';
inner = 42;
width = inner + 2;
valueCol = 13;
spaces = n: lib.concatStrings (lib.genList (_: " ") n);
border = paint c.base0D;
hbar = lib.concatStrings (lib.genList (_: "") inner);
row = content: border "" + content + border "";
blank = row (spaces inner);
entry = name: value: let
prompt = " ${name}:";
gap = spaces (valueCol - builtins.stringLength prompt);
tail = spaces (inner - valueCol - builtins.stringLength value);
in
row (border prompt + gap + paint c.base05 value + tail);
lines = [
(border "${hbar}")
blank
(entry "Session" "Hyprland")
(entry "Username" config.home.username)
(entry "Password" "")
blank
(border "${hbar}")
];
rowY = i: -((i + 0.5) - (builtins.length lines) / 2.0) * lineH;
colX = i: (i - width / 2.0) * charW;
frameHalfH = (builtins.length lines) * lineH / 2.0;
outsideY = frameHalfH + 1.5 * lineH;
inputH = fontSize / 0.8;
inputW = 27 * charW;
dotPad = (inputH - lineH) / 2.0;
inputX = colX (valueCol + 1) - dotPad;
passwordRow = 4;
hidden = "<span> </span>";
in { in {
stylix.targets.hyprlock.enable = false; stylix.targets.hyprlock.enable = false;
programs.hyprlock = { programs.hyprlock = {
enable = true; enable = true;
settings = { settings = {
general = {
grace = 2;
};
background = [ background = [
{ {
monitor = ""; monitor = "";
@@ -16,65 +80,87 @@ in {
label = [ label = [
{ {
monitor = ""; monitor = "";
text = ''cmd[update:0] echo "[$USER@$(hostname) ~]"''; text = ''cmd[update:1000] date +"%H:%M %A %d %B"'';
color = "rgb(${c.base0D})";
font_size = 13;
font_family = "Maple Mono NF";
position = "48, -48";
halign = "left";
valign = "top";
}
{
monitor = "";
text = ''cmd[update:1000] echo "$(date +'%H:%M:%S')"'';
color = "rgb(${c.base05})"; color = "rgb(${c.base05})";
font_size = 13; font_size = fontSize;
font_family = "Maple Mono NF"; font_family = font;
position = "48, -70"; position = "0, -64";
halign = "left"; halign = "center";
valign = "top"; valign = "top";
} }
{ {
monitor = ""; monitor = "";
text = ''cmd[update:60000] echo "$(date +'%A %d %B %Y')"''; text = "Welcome";
color = "rgb(${c.base05})";
font_size = fontSize;
font_family = font;
position = "0, ${px outsideY}";
halign = "center";
valign = "center";
}
{
monitor = "";
text = fromFile "hyprlock-frame" (lib.concatStringsSep "\n" lines);
color = "rgb(${c.base05})";
font_size = fontSize;
font_family = font;
text_align = "left";
position = "0, 0";
halign = "center";
valign = "center";
}
{
monitor = "";
text = "<span> </span>$FAIL<span> </span>";
color = "rgb(${c.base08})";
font_size = fontSize;
font_family = font;
position = "0, ${px (-outsideY)}";
halign = "center";
valign = "center";
}
{
monitor = "";
text =
fromFile "hyprlock-hints"
"${paint c.base0D "Enter"} ${paint c.base04 "unlock"} ${paint c.base0D "Esc"} ${paint c.base04 "clear"}";
color = "rgb(${c.base04})"; color = "rgb(${c.base04})";
font_size = 13; font_size = fontSize;
font_family = "Maple Mono NF"; font_family = font;
position = "48, -92"; position = "0, 40";
halign = "left"; halign = "center";
valign = "top"; valign = "bottom";
}
{
monitor = "";
text = "passwd:";
color = "rgb(${c.base0D})";
font_size = 13;
font_family = "Maple Mono NF";
position = "48, -141";
halign = "left";
valign = "top";
} }
]; ];
"input-field" = [ "input-field" = [
{ {
monitor = ""; monitor = "";
size = "200, 20"; size = "${px inputW}, ${px inputH}";
position = "${px (inputX + inputW / 2.0)}, ${px (rowY passwordRow)}";
halign = "center";
valign = "center";
outline_thickness = 0; outline_thickness = 0;
outer_color = "rgba(00000000)"; outer_color = "rgba(00000000)";
inner_color = "rgba(00000000)"; inner_color = "rgba(00000000)";
font_color = "rgb(${c.base05})";
fade_on_empty = false;
placeholder_text = "";
hide_input = true;
rounding = 0; rounding = 0;
check_color = "rgb(${c.base0B})"; fade_on_empty = false;
font_family = font;
font_color = "rgb(${c.base05})";
dots_text_format = "*";
dots_size = 0.8;
dots_spacing = 0.0;
dots_center = false;
swap_font_color = true;
placeholder_text = hidden;
fail_text = hidden;
check_color = "rgb(${c.base0C})";
fail_color = "rgb(${c.base08})"; fail_color = "rgb(${c.base08})";
fail_text = ''<span font_desc="Maple Mono NF 13">auth failed</span>'';
capslock_color = "rgb(${c.base0A})"; capslock_color = "rgb(${c.base0A})";
position = "116, -138";
halign = "left";
valign = "top";
} }
]; ];
}; };
+1 -1
View File
@@ -1,9 +1,9 @@
{ {
config, config,
pkgs, pkgs,
scripts,
... ...
}: let }: let
scripts = import ../waybar/scripts.nix {inherit pkgs config;};
c = config.lib.stylix.colors; c = config.lib.stylix.colors;
font = config.stylix.fonts.sansSerif.name; font = config.stylix.fonts.sansSerif.name;
monofont = config.stylix.fonts.monospace.name; monofont = config.stylix.fonts.monospace.name;
+2 -4
View File
@@ -1,10 +1,8 @@
{ {
pkgs, pkgs,
config, scripts,
... ...
}: let }: {
scripts = import ../waybar/scripts.nix {inherit pkgs config;};
in {
xdg.desktopEntries = { xdg.desktopEntries = {
focus-toggle = { focus-toggle = {
name = "Focus Mode"; name = "Focus Mode";
+2
View File
@@ -10,6 +10,8 @@ in {
./style.nix ./style.nix
]; ];
_module.args.scripts = scripts;
_module.args.osdPath = scripts.osdPath;
_module.args.networkScript = scripts.networkScript; _module.args.networkScript = scripts.networkScript;
_module.args.bluetoothScript = scripts.bluetoothScript; _module.args.bluetoothScript = scripts.bluetoothScript;
_module.args.volMuteScript = scripts.vol-mute; _module.args.volMuteScript = scripts.vol-mute;
+23 -22
View File
@@ -6,7 +6,7 @@
name = "waybar-osd"; name = "waybar-osd";
runtimeInputs = with pkgs; [procps coreutils]; runtimeInputs = with pkgs; [procps coreutils];
text = '' text = ''
printf '%s' "$1" > /tmp/waybar-osd printf '%s' "$1" > "$XDG_RUNTIME_DIR/waybar-osd"
pkill -f -RTMIN+8 '^waybar$' 2>/dev/null || true pkill -f -RTMIN+8 '^waybar$' 2>/dev/null || true
''; '';
}; };
@@ -15,7 +15,7 @@
name = "waybar-osd-status"; name = "waybar-osd-status";
runtimeInputs = with pkgs; [coreutils]; runtimeInputs = with pkgs; [coreutils];
text = '' text = ''
file=/tmp/waybar-osd file="$XDG_RUNTIME_DIR/waybar-osd"
[ -f "$file" ] || exit 1 [ -f "$file" ] || exit 1
mtime=$(stat -c %Y "$file" 2>/dev/null) || exit 1 mtime=$(stat -c %Y "$file" 2>/dev/null) || exit 1
age=$(( $(date +%s) - mtime )) age=$(( $(date +%s) - mtime ))
@@ -86,8 +86,9 @@
jq -r 'to_entries[] | select(.key != "METADATA") | "\(.value.char) \(.key)"' \ jq -r 'to_entries[] | select(.key != "METADATA") | "\(.value.char) \(.key)"' \
${nerdFontGlyphnames} > "$out" ${nerdFontGlyphnames} > "$out"
''; '';
osdPath = "$XDG_RUNTIME_DIR/waybar-osd";
in { in {
inherit waybar-osd waybar-osd-status battery-monitor; inherit waybar-osd waybar-osd-status battery-monitor osdPath;
bluetoothScript = pkgs.writeShellScript "waybar-bluetooth" '' bluetoothScript = pkgs.writeShellScript "waybar-bluetooth" ''
jq=${pkgs.jq}/bin/jq jq=${pkgs.jq}/bin/jq
@@ -234,19 +235,19 @@ in {
''; '';
wifi-toggle = pkgs.writeShellScriptBin "wifi-toggle" '' wifi-toggle = pkgs.writeShellScriptBin "wifi-toggle" ''
if nmcli radio wifi | grep -q enabled; then if ${pkgs.networkmanager}/bin/nmcli radio wifi | grep -q enabled; then
nmcli radio wifi off ${pkgs.networkmanager}/bin/nmcli radio wifi off
else else
nmcli radio wifi on ${pkgs.networkmanager}/bin/nmcli radio wifi on
fi fi
${updateOsd} ${updateOsd}
''; '';
bluetooth-toggle = pkgs.writeShellScriptBin "bluetooth-toggle" '' bluetooth-toggle = pkgs.writeShellScriptBin "bluetooth-toggle" ''
if bluetoothctl show | grep -q "Powered: yes"; then if ${pkgs.bluez}/bin/bluetoothctl show | grep -q "Powered: yes"; then
bluetoothctl power off ${pkgs.bluez}/bin/bluetoothctl power off
else else
bluetoothctl power on ${pkgs.bluez}/bin/bluetoothctl power on
fi fi
${updateOsd} ${updateOsd}
''; '';
@@ -260,7 +261,7 @@ in {
''; '';
nightshift-toggle = pkgs.writeShellScriptBin "nightshift-toggle" '' nightshift-toggle = pkgs.writeShellScriptBin "nightshift-toggle" ''
if pidof "hyprsunset" > /dev/null; then if ${pkgs.procps}/bin/pidof "hyprsunset" > /dev/null; then
pkill hyprsunset pkill hyprsunset
OSD_TEXT="󰖔 Night Shift Off" OSD_TEXT="󰖔 Night Shift Off"
else else
@@ -271,23 +272,23 @@ in {
''; '';
focus-toggle = pkgs.writeShellScriptBin "focus-toggle" '' focus-toggle = pkgs.writeShellScriptBin "focus-toggle" ''
if test -f /tmp/hypr-focus-mode; then if test -f "$XDG_RUNTIME_DIR/hypr-focus-mode"; then
rm /tmp/hypr-focus-mode rm "$XDG_RUNTIME_DIR/hypr-focus-mode"
OSD_TEXT="󰈈 Focus Off" OSD_TEXT="󰈈 Focus Off"
${updateOsd} ${updateOsd}
hyprctl reload ${pkgs.hyprland}/bin/hyprctl reload
hyprctl dispatch exec waybar ${pkgs.hyprland}/bin/hyprctl dispatch exec waybar
else else
touch /tmp/hypr-focus-mode touch "$XDG_RUNTIME_DIR/hypr-focus-mode"
OSD_TEXT="󰈈 Focus On" OSD_TEXT="󰈈 Focus On"
${updateOsd} ${updateOsd}
pkill waybar || true ${pkgs.procps}/bin/pkill waybar || true
hyprctl keyword animations:enabled false ${pkgs.hyprland}/bin/hyprctl keyword animations:enabled false
hyprctl keyword general:gaps_in 0 ${pkgs.hyprland}/bin/hyprctl keyword general:gaps_in 0
hyprctl keyword general:gaps_out 0 ${pkgs.hyprland}/bin/hyprctl keyword general:gaps_out 0
hyprctl keyword decoration:active_opacity 1 ${pkgs.hyprland}/bin/hyprctl keyword decoration:active_opacity 1
hyprctl keyword decoration:inactive_opacity 1 ${pkgs.hyprland}/bin/hyprctl keyword decoration:inactive_opacity 1
hyprctl keyword decoration:rounding 0 ${pkgs.hyprland}/bin/hyprctl keyword decoration:rounding 0
fi fi
''; '';
+2 -1
View File
@@ -1,6 +1,7 @@
{ {
config, config,
pkgs, pkgs,
osdPath,
networkScript, networkScript,
bluetoothScript, bluetoothScript,
caffeineToggleScript, caffeineToggleScript,
@@ -76,7 +77,7 @@ in {
}; };
"custom/osd" = { "custom/osd" = {
exec = "cat /tmp/waybar-osd"; exec = "cat ${osdPath}";
exec-if = "${osdStatusScript}/bin/waybar-osd-status"; exec-if = "${osdStatusScript}/bin/waybar-osd-status";
signal = 8; signal = 8;
interval = 1; interval = 1;
+1
View File
@@ -14,6 +14,7 @@
../../nixos/utils.nix ../../nixos/utils.nix
../../nixos/hyprland.nix ../../nixos/hyprland.nix
../../nixos/steam.nix ../../nixos/steam.nix
../../nixos/kernel-hardening.nix
../../home/programs/gui/helium/system.nix # I hate browser's configuration.. ../../home/programs/gui/helium/system.nix # I hate browser's configuration..
# CHANGEME: You should probably remove those things: # CHANGEME: You should probably remove those things:
+3 -1
View File
@@ -1,6 +1,7 @@
{ {
config, config,
inputs, inputs,
lib,
... ...
}: { }: {
imports = [ imports = [
@@ -24,6 +25,7 @@
../../home/programs/tui/spotatui ../../home/programs/tui/spotatui
../../home/programs/tui/elio ../../home/programs/tui/elio
../../home/programs/tui/wikiman ../../home/programs/tui/wikiman
../../home/programs/tui/navi
../../home/programs/tui/pkgs.nix ../../home/programs/tui/pkgs.nix
## GROUPS ## GROUPS
@@ -49,7 +51,7 @@
inherit (config.var) username; inherit (config.var) username;
homeDirectory = "/home/" + config.var.username; homeDirectory = "/home/" + config.var.username;
persistence."/persist" = { persistence."/persist" = lib.mkIf (config.var.impermanenceEnabled or false) {
directories = [ directories = [
".config/nixos" # this repo itself (nixy manages it here) ".config/nixos" # this repo itself (nixy manages it here)
".local/share" ".local/share"
+1
View File
@@ -13,6 +13,7 @@
"/var/lib/systemd/timers" # last-run timestamps (e.g. nix gc weekly) "/var/lib/systemd/timers" # last-run timestamps (e.g. nix gc weekly)
"/var/log" "/var/log"
"/var/cache/tuigreet" "/var/cache/tuigreet"
"/var/cache/vulnix"
"/var/db/sudo/lectured" # remembers that the sudo lecture was already shown "/var/db/sudo/lectured" # remembers that the sudo lecture was already shown
]; ];
+6
View File
@@ -14,26 +14,32 @@ in {
secrets = { secrets = {
ssh-config = { ssh-config = {
owner = username; owner = username;
mode = "0600";
path = "${home}/.ssh/config"; path = "${home}/.ssh/config";
}; };
ssh-github-key = { ssh-github-key = {
owner = username; owner = username;
mode = "0600";
path = "${home}/.ssh/github"; path = "${home}/.ssh/github";
}; };
anotherhadi-pgp-key = { anotherhadi-pgp-key = {
owner = username; owner = username;
mode = "0600";
path = "${home}/.ssh/anotherhadi-priv.asc"; path = "${home}/.ssh/anotherhadi-priv.asc";
}; };
ssh-jack-key = { ssh-jack-key = {
owner = username; owner = username;
mode = "0600";
path = "${home}/.ssh/jack"; path = "${home}/.ssh/jack";
}; };
signing-key = { signing-key = {
owner = username; owner = username;
mode = "0600";
path = "${home}/.ssh/key"; path = "${home}/.ssh/key";
}; };
signing-pub-key = { signing-pub-key = {
owner = username; owner = username;
mode = "0600";
path = "${home}/.ssh/key.pub"; path = "${home}/.ssh/key.pub";
}; };
}; };
+13 -20
View File
@@ -11,27 +11,20 @@
"root" "root"
]; ];
rules = '' rules = ''
allow id 1d6b:0002 serial "0000:05:00.3" name "xHCI Host Controller" hash "4a4NgfdUaJO43rkCzmWRSeHHR/uUh5+SNsXnhosm9qs=" parent-hash "ldMchY4Tt4GPUYo30eNGvai+Fs/EdnVY3vMyxJUq4Nk=" with-interface 09:00:00 with-connect-type "" allow id 13fd:5900 name "External"
allow id 1d6b:0003 serial "0000:05:00.3" name "xHCI Host Controller" hash "d+DNGWARDtv9nEK2ZvnNOCtFernuMu5/e/oZ7kCppqQ=" parent-hash "ldMchY4Tt4GPUYo30eNGvai+Fs/EdnVY3vMyxJUq4Nk=" with-interface 09:00:00 with-connect-type "" allow id 1d6b:0003 name "xHCI Host Controller"
allow id 1d6b:0002 serial "0000:05:00.4" name "xHCI Host Controller" hash "icotY3rI59mWiKsGxc59BGZZeBjfbuH0b4NUByj3cbQ=" parent-hash "tHvBfznK5rpQn+oa0PEEjHa29EAEvGyCcZixsfwA6W0=" with-interface 09:00:00 with-connect-type "" allow id 1d6b:0002 name "xHCI Host Controller"
allow id 1d6b:0003 serial "0000:05:00.4" name "xHCI Host Controller" hash "UbEoCZW8HT2ldc3qDeiK+IiQlGeaBC7F63681OwmKhI=" parent-hash "tHvBfznK5rpQn+oa0PEEjHa29EAEvGyCcZixsfwA6W0=" with-interface 09:00:00 with-connect-type "" allow id 0bda:c85c name "Bluetooth Radio"
allow id 1d6b:0002 serial "0000:07:00.3" name "xHCI Host Controller" hash "pz29Oo0RhQ+5+7LgOZR4v3OlcsVv3m9kCgGsGUnoUjI=" parent-hash "DRyV2/31MYHdzkIEfbPQeb/1w4/PjOW6GqWrXkftf2I=" with-interface 09:00:00 with-connect-type "" allow id 30c9:009f name "HP True Vision FHD Camera"
allow id 1d6b:0003 serial "0000:07:00.3" name "xHCI Host Controller" hash "O6iOpcl9StImWT62SrbeXacqbG6N/mTIipTRc0ipCGM=" parent-hash "DRyV2/31MYHdzkIEfbPQeb/1w4/PjOW6GqWrXkftf2I=" with-interface 09:00:00 with-connect-type "" allow id 03f0:036b name "HP USB-C Dock G5"
allow id 1d6b:0002 serial "0000:07:00.4" name "xHCI Host Controller" hash "Hp8B0Enf+ACRT2tyy0EqXj7eNsFDAnTRZadzuh/Iqd4=" parent-hash "l2vhvC+VGVKlkBUUK/usFu8jHJ/5bWOnJG6WzRexpt4=" with-interface 09:00:00 with-connect-type ""
allow id 1d6b:0003 serial "0000:07:00.4" name "xHCI Host Controller" hash "rJ3LKdvkCK3SUrCU3lV8qVbmPjA+r9Fe5106x2HlgK4=" parent-hash "l2vhvC+VGVKlkBUUK/usFu8jHJ/5bWOnJG6WzRexpt4=" with-interface 09:00:00 with-connect-type ""
allow id 0bda:c85c serial "00e04c000001" name "Bluetooth Radio" hash "Q/wlToV8WQgEYHBW/UIhnSwCCusCGqAR2D5gspSCImQ=" parent-hash "4a4NgfdUaJO43rkCzmWRSeHHR/uUh5+SNsXnhosm9qs=" with-interface { e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 } with-connect-type "hardwired"
allow id 30c9:009f serial "01.00.00" name "HP True Vision FHD Camera" hash "eYW5fqReJd29tfHXkEktKC63dGfDpmlRMo5uMGUWwME=" parent-hash "icotY3rI59mWiKsGxc59BGZZeBjfbuH0b4NUByj3cbQ=" with-interface { 0e:01:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 fe:01:01 } with-connect-type "hardwired"
allow id 03f0:036b serial "" name "HP USB-C Dock G5" hash "iPFGrgGz0sWgKQjWD/F8eNOhkeR728dTG8JJtkUSvuM=" parent-hash "Hp8B0Enf+ACRT2tyy0EqXj7eNsFDAnTRZadzuh/Iqd4=" via-port "7-1" with-interface { 09:00:01 09:00:02 } with-connect-type "hotplug"
allow id 03f0:066b serial "" name "HP USB-C Dock G5" hash "JHDjLFApQNqijjmuKdJSWH5+1oLL7S6LQ9QHTAk5fTk=" parent-hash "rJ3LKdvkCK3SUrCU3lV8qVbmPjA+r9Fe5106x2HlgK4=" via-port "8-1" with-interface 09:00:00 with-connect-type "hotplug"
allow id 03f0:056b serial "201604140001" name "USB Audio" hash "OxQ8HQenW3/4HSGEBOSYFS15rXDTOaNDnjMbICweHgw=" parent-hash "iPFGrgGz0sWgKQjWD/F8eNOhkeR728dTG8JJtkUSvuM=" with-interface { 01:01:00 01:02:00 01:02:00 01:02:00 01:02:00 03:00:00 } with-connect-type "unknown"
allow id 03f0:086b serial "" name "USB2734" hash "MSXcPAlZqkpTyZQylOhSIB8eMfST2AzVHV9EbrBGTWc=" parent-hash "iPFGrgGz0sWgKQjWD/F8eNOhkeR728dTG8JJtkUSvuM=" via-port "7-1.3" with-interface { 09:00:01 09:00:02 } with-connect-type "unknown"
allow id 03f0:046b serial "11AD1D0A89EA2D08310E0B00" name "HP USB-C Dock G5" hash "DEGeuj1u4lwqrzp0UksFX7mSEY9JnGLxg7yxGbglAKE=" parent-hash "iPFGrgGz0sWgKQjWD/F8eNOhkeR728dTG8JJtkUSvuM=" with-interface { 11:00:00 ff:03:00 03:00:00 } with-connect-type "unknown"
allow id 03f0:076b serial "" name "USB5734" hash "BshoqybYo0IKgoDORYPRtbhhlmQrYAxPQb2EAm1JsWA=" parent-hash "JHDjLFApQNqijjmuKdJSWH5+1oLL7S6LQ9QHTAk5fTk=" via-port "8-1.3" with-interface 09:00:00 with-connect-type "unknown"
allow id 0bda:8153 serial "000001000000" name "USB 10/100/1000 LAN" hash "utEnXKJ57kRUbPcGUaNWhEyoOEbLOYAFxvlsyC0PZkk=" parent-hash "JHDjLFApQNqijjmuKdJSWH5+1oLL7S6LQ9QHTAk5fTk=" with-interface { ff:ff:00 02:06:00 0a:00:00 0a:00:00 } with-connect-type "unknown"
allow id 046d:0ab7 serial "2046BAB04T68" name "Blue Microphones" hash "cC6AQ2e1Q/BeFeostpbf1mH2WpoUmt6bhau4NlA3niU=" parent-hash "MSXcPAlZqkpTyZQylOhSIB8eMfST2AzVHV9EbrBGTWc=" with-interface { 01:01:00 01:02:00 01:02:00 01:02:00 01:02:00 01:02:00 01:02:00 03:00:00 } with-connect-type "unknown"
allow id 13fd:5900 serial "50026B76861EE752 " name "External" hash "l/QvVV5hzZj1z6OUwB/kWl+WnH/7awrdMBoiNVx660M=" parent-hash "MSXcPAlZqkpTyZQylOhSIB8eMfST2AzVHV9EbrBGTWc=" with-interface { 08:06:50 08:06:62 } with-connect-type "unknown"
allow id 1532:02a1 name "Razer Ornata V3"
allow id 03f0:066b name "HP USB-C Dock G5" allow id 03f0:066b name "HP USB-C Dock G5"
allow id 03f0:056b name "USB Audio"
allow id 0bda:8153 name "USB 10/100/1000 LAN"
allow id 046d:0ab7 name "Blue Microphones"
allow id 03f0:076b name "USB5734"
allow id 1532:02a1 name "Razer Ornata V3"
allow id 03f0:046b name "HP USB-C Dock G5"
allow id 03f0:086b name "USB2734"
''; '';
}; };
} }
+1
View File
@@ -26,6 +26,7 @@
autoUpgrade = false; autoUpgrade = false;
autoGarbageCollector = true; autoGarbageCollector = true;
impermanenceEnabled = true;
}; };
# DON'T TOUCH THIS # DON'T TOUCH THIS
+3 -7
View File
@@ -16,17 +16,13 @@
../../server-modules/adguardhome.nix ../../server-modules/adguardhome.nix
../../server-modules/arr.nix ../../server-modules/arr.nix
../../server-modules/blog.nix ../../server-modules/blog.nix
../../server-modules/awesome-wallpapers.nix ../../server-modules/bentopdf.nix
../../server-modules/iknowyou.nix
../../server-modules/stirling-pdf.nix
../../server-modules/cyberchef.nix ../../server-modules/cyberchef.nix
../../server-modules/mazanoke.nix ../../server-modules/mazanoke.nix
../../server-modules/kernel-hardening.nix ../../nixos/kernel-hardening.nix
../../server-modules/fail2ban.nix ../../server-modules/fail2ban.nix
../../server-modules/default-creds.nix ../../server-modules/default-creds.nix
../../server-modules/umami.nix
../../server-modules/gitea.nix ../../server-modules/gitea.nix
../../server-modules/mealie.nix
# You should let those lines as is # You should let those lines as is
./hardware-configuration.nix ./hardware-configuration.nix
@@ -38,5 +34,5 @@
home-manager.users."${config.var.username}" = import ./home.nix; home-manager.users."${config.var.username}" = import ./home.nix;
# Don't touch this # Don't touch this
system.stateVersion = "24.05"; system.stateVersion = "26.05";
} }
+7 -1
View File
@@ -6,13 +6,19 @@
}: }:
nixpkgs.lib.nixosSystem { nixpkgs.lib.nixosSystem {
modules = [ modules = [
{_module.args = {inherit inputs pkgs-unstable;};} {
nixpkgs.overlays = [
inputs.nur.overlays.default
];
_module.args = {inherit inputs pkgs-unstable;};
}
inputs.home-manager.nixosModules.home-manager inputs.home-manager.nixosModules.home-manager
inputs.stylix.nixosModules.stylix inputs.stylix.nixosModules.stylix
inputs.sops-nix.nixosModules.sops inputs.sops-nix.nixosModules.sops
inputs.nixarr.nixosModules.default inputs.nixarr.nixosModules.default
inputs.nix-index-database.nixosModules.default inputs.nix-index-database.nixosModules.default
inputs.default-creds.nixosModules.default inputs.default-creds.nixosModules.default
inputs.impermanence.nixosModules.impermanence
./configuration.nix ./configuration.nix
]; ];
} }
+10 -5
View File
@@ -4,18 +4,23 @@
... ...
}: { }: {
imports = [ imports = [
# Mostly user-specific configuration ## TUI
./variables.nix
# Programs
inputs.nvf-config.homeManagerModules.default inputs.nvf-config.homeManagerModules.default
../../home/programs/tui/ilovetui
../../home/programs/tui/shell ../../home/programs/tui/shell
../../home/programs/tui/git ../../home/programs/tui/git
../../home/programs/tui/git/lazygit.nix ../../home/programs/tui/git/lazygit.nix
../../home/programs/tui/git/signing.nix # CHANGEME: Change the key or remove this file
../../home/programs/tui/nixy ../../home/programs/tui/nixy
../../home/programs/tui/nix-utils ../../home/programs/tui/nix-utils
../../home/programs/tui/elio
../../home/programs/tui/wikiman
../../home/programs/tui/pkgs.nix
../../home/programs/group/dev.nix ../../home/programs/group/dev.nix
# Mostly user-specific configuration
./variables.nix
]; ];
home = { home = {
@@ -23,7 +28,7 @@
homeDirectory = "/home/" + config.var.username; homeDirectory = "/home/" + config.var.username;
# Don't touch this # Don't touch this
stateVersion = "24.05"; stateVersion = "26.05";
}; };
programs.home-manager.enable = true; programs.home-manager.enable = true;
+1 -1
View File
@@ -8,7 +8,7 @@
path = "/home/hadi/.ssh/config"; path = "/home/hadi/.ssh/config";
mode = "0600"; mode = "0600";
}; };
github-key = { ssh-github-key = {
owner = "hadi"; owner = "hadi";
path = "/home/hadi/.ssh/github"; path = "/home/hadi/.ssh/github";
mode = "0600"; mode = "0600";
+35
View File
@@ -0,0 +1,35 @@
{config, ...}: {
imports = [
# Mostly system related configuration
../../nixos/audio.nix
../../nixos/fonts.nix
../../nixos/home-manager.nix
../../nixos/nix.nix
../../nixos/systemd-boot.nix
../../nixos/tuigreet.nix
../../nixos/autologin.nix # Skip first TUIGreet login, use LUKS password to unlock the keyring
../../nixos/users.nix
../../nixos/utils.nix
../../nixos/hyprland.nix
../../nixos/kernel-hardening.nix
../../nixos/vulnix.nix
../../home/programs/gui/helium/system.nix # I hate browser's configuration..
# CHANGEME: You should probably remove those things:
./persistence.nix # impermanence: what to keep once "/" is wiped on boot
./usbguard.nix
./disko.nix
./secrets
# You should let those lines as is
./hardware-configuration.nix
./variables.nix
];
home-manager.users."${config.var.username}" = import ./home.nix;
users.users.${config.var.username}.hashedPassword = "$y$j9T$quUlRuvuYJ18asD8SUrh11$0mHCP7ZRIOYjNHY0oT.aFfVho1V0M65eClLzVo0RARD"; # CHANGEME: This is my password
# Don't touch this
system.stateVersion = "26.05";
}
+64
View File
@@ -0,0 +1,64 @@
{
disko.devices = {
nodev = {
"/" = {
fsType = "tmpfs";
mountOptions = [
"defaults"
"size=12G"
"mode=755"
];
};
};
disk = {
main = {
type = "disk";
device = "/dev/disk/by-id/nvme-SK_hynix_PVC10_HFS512GEM9X173N_5MF4N00141310464Q";
content = {
type = "gpt";
partitions = {
ESP = {
size = "512M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = ["fmask=0077" "dmask=0077"];
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "crypted";
settings = {
allowDiscards = true;
bypassWorkqueues = true;
};
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"/nix" = {
mountpoint = "/nix";
mountOptions = ["compress=zstd" "noatime"];
};
"/persist" = {
mountpoint = "/persist";
mountOptions = ["compress=zstd" "noatime"];
};
};
};
};
};
};
};
};
};
};
fileSystems."/persist".neededForBoot = true;
}
+25
View File
@@ -0,0 +1,25 @@
{
inputs,
nixpkgs,
pkgs-unstable,
...
}:
nixpkgs.lib.nixosSystem {
modules = [
{
nixpkgs.overlays = [
inputs.nur.overlays.default
];
_module.args = {inherit inputs pkgs-unstable;};
}
inputs.home-manager.nixosModules.home-manager
inputs.stylix.nixosModules.stylix
inputs.sops-nix.nixosModules.sops
inputs.nix-index-database.nixosModules.default
inputs.helium-browser.nixosModules.default
inputs.impermanence.nixosModules.impermanence
inputs.disko.nixosModules.disko
./disko.nix
./configuration.nix
];
}
+21
View File
@@ -0,0 +1,21 @@
# Hardware detection - filesystems are managed by disko.nix
{
config,
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
swapDevices = [];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+88
View File
@@ -0,0 +1,88 @@
{
config,
inputs,
lib,
...
}: {
imports = [
# Programs
## GUI
../../home/programs/gui/proton
../../home/programs/gui/helium
../../home/programs/gui/pkgs.nix
## TUI
inputs.nvf-config.homeManagerModules.default
../../home/programs/tui/ghostty
../../home/programs/tui/ilovetui
../../home/programs/tui/shell
../../home/programs/tui/git
../../home/programs/tui/git/lazygit.nix
../../home/programs/tui/nixy
../../home/programs/tui/nix-utils
../../home/programs/tui/spotatui
../../home/programs/tui/elio
../../home/programs/tui/wikiman
../../home/programs/tui/navi
../../home/programs/tui/pkgs.nix
## GROUPS
../../home/programs/group/cybersecurity.nix
../../home/programs/group/dev.nix
# System (Desktop environment like stuff)
../../home/system/hyprlock
../../home/system/hyprland
../../home/system/waybar
../../home/system/swaync
../../home/system/tofi
../../home/system/mime
../../home/system/udiskie
../../home/system/termfilechooser
../../home/system/clipboard
../../home/system/hypridle
./variables.nix # Mostly user-specific configuration
];
home = {
inherit (config.var) username;
homeDirectory = "/home/" + config.var.username;
persistence."/persist" = lib.mkIf (config.var.impermanenceEnabled or false) {
directories = [
".config/nixos" # this repo itself (nixy manages it here)
".local/share"
".local/state"
".cache"
"Notes"
"Projects"
"Documents"
"Downloads"
"Pictures"
"Videos"
];
files = [
".ssh/known_hosts"
".config/sops/age/keys.txt"
];
};
# Don't touch this
stateVersion = "26.05";
};
wayland.windowManager.hyprland.settings.monitor = [
"desc:Philips Consumer Electronics Company PHL 221B8L ZV02144013987,highres,0x0,1"
];
programs = {
home-manager.enable = true;
nixy = {
enable = true;
configDirectory = config.var.configDirectory;
};
};
}
+29
View File
@@ -0,0 +1,29 @@
# Impermanence: declares what should survive a wipe of "/".
{
environment.persistence."/persist" = {
hideMounts = true;
directories = [
"/etc/NetworkManager/system-connections" # Wifi connections, VPN
"/var/lib/bluetooth" # Bluetooth connections
"/var/lib/nixos" # keeps uid/gid stable across boots
"/var/lib/systemd/coredump"
"/var/lib/upower" # battery calibration state
"/var/lib/systemd/backlight" # remembers screen brightness
"/var/lib/systemd/timers" # last-run timestamps (e.g. nix gc weekly)
"/var/log"
"/var/cache/tuigreet"
"/var/cache/vulnix"
"/var/db/sudo/lectured" # remembers that the sudo lecture was already shown
];
files = [
"/etc/machine-id"
"/etc/ssh/ssh_host_ed25519_key"
"/etc/ssh/ssh_host_ed25519_key.pub"
"/etc/ssh/ssh_host_rsa_key"
"/etc/ssh/ssh_host_rsa_key.pub"
"/var/lib/systemd/random-seed" # avoid a weak entropy pool on first boot
];
};
}
+42
View File
@@ -0,0 +1,42 @@
# Those are my secrets, encrypted with sops
# You shouldn't import this file, unless you edit it
{
pkgs,
config,
...
}: let
username = config.var.username;
home = "/home/${username}";
in {
sops = {
age.keyFile = "${home}/.config/sops/age/keys.txt";
defaultSopsFile = ./secrets.yaml;
secrets = {
ssh-config = {
owner = username;
mode = "0600";
path = "${home}/.ssh/config";
};
netrc = {
owner = username;
mode = "0600";
path = "${home}/.netrc";
};
ssh-github-key = {
owner = username;
mode = "0600";
path = "${home}/.ssh/github";
};
ssh-gitlab-key = {
owner = username;
mode = "0600";
path = "${home}/.ssh/gitlab";
};
};
};
environment.systemPackages = with pkgs; [
sops
age
];
}
+28
View File
@@ -0,0 +1,28 @@
ssh-config: ENC[AES256_GCM,data:yTlt8SYPiON8aabbpQ9fE02hvp/u4oDmLaLuADzdOGdAL12MNe1QnNCND3lQ/nT+uxwm8k7OxExBfc70osLPjiq/CjNk1NOaO1nmBOXZqugnf33dF19P8SCMT2KtZTI1tYU2Kd5GmwpnozU6Qh0uJH+0ebR2tQnLChl16ap9fc6rg3AbD+XknSJ3+TndgZPBy4mN/MzT/GFL2kBDbYCmLoMXWDKxCM6ta1NvLRD8W7EBMeh/CNfkU+cw1kPjgPudDBP047VFudnqiueEAAigk3imqPyDFE1Jz4ouvVuLQz/f1BWnyZon3+sgHESAMRtAP3Lt7zo3s4PTJ04ohB4gk6K2fGBsFdyaWJp4uR8FMOhXrwG813KI,iv:W6bcO9ElLJ7YvN6PenqWNQnNSLi2WxZsjBc/adKdjeg=,tag:zKdx+RFXiOKpsY8EOGs46g==,type:str]
netrc: ENC[AES256_GCM,data:dlfPJqzz7EZ5JHBmQr7imMDlQv9KFfzDKY6YywtPWR7re7z9jBFgMoaPRk62ocCVltofak6Zrsr3on1jPrrpMwk4DQYFSnQ5tvUTi/1LJWpf9GgjokC5nqc=,iv:se1ysRyzZmB6MjU4heFrDLHe2bv8Ml2iLC4MuIcQW9Y=,tag:oyu8wfR+9hvOuKmsk2sDXw==,type:str]
ssh-github-key: ENC[AES256_GCM,data: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,iv:ElF3tykw7GKyhdb1YJBivwxT74DEWkdU1EOuOa/ntUM=,tag:+RYqptKt4L3UynBaoBmwNA==,type:str]
ssh-gitlab-key: ENC[AES256_GCM,data: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,iv:h87uW6VOwRubj19DKxEoddRN5/2v+vmKlBxfZnGjY70=,tag:SV17QrAMwJb0QWOXRbPdnw==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBma2xHeGpudjVRMTQ2WFlZ
aGJvNnJvM0hkQjM0MThZSjQvc1ErYXZRSDJjCkphZDZycUljcUhUQStNT1RFN29z
djRrTzhTckt2K1I1TGsvRWFaeVdSK1kKLS0tIFBGdFFpV1lTNlFzMSt1TktDNk91
NUphdlJ5ODZjNDZyTUl3OStpdmYrUWcKYKZ8pvGG1QkCBZTqVtFb5GIYWYfsr/Mc
+OGeP1hRwQzJ9+DLUgrsfK/8vr+0Y5q2Nej9gbfxyrnlszussbOADw==
-----END AGE ENCRYPTED FILE-----
recipient: age1c8pawdsxptfslgrz2c56s39mrtnjzc5mm3hfzgr2wdwu2v6vfsdsupjsq6
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0aWQ1NzVWc0lnMXBHZFZq
SEplcWMwc1R4NmkvdWdMQUJWY2R0dnRBeVVzCjBCNjVEc3hJazJzZXFFc0EzbXNV
enFtYnNVNzUwYVQ4RVUxWVhROFJhT2sKLS0tIGpWeHNwWm5NakFzY0JzYWxicHhk
MzVVaVdyOEtoUkF1aDY2UnBGbC9rbDgKoEUqT/OlVXYR5MVlpsnTY4NHa6yg3FzQ
WaBrZfGv2/dKeulFCKKFrT3ZG8TIbLTqdRoVIrUp1O+U3vObzY9fzA==
-----END AGE ENCRYPTED FILE-----
recipient: age12yvtj49pfh3fqzqflscm0ek4yzrjhr6cqhn7x89gdxnlykq0xudq5c7334
lastmodified: "2026-08-17T12:19:14Z"
mac: ENC[AES256_GCM,data:2rK9RlYE7dX/c6zg3J1AeB1TI3v2XVhoUGsou0u35enhebzINUCYVC9HN9Te+6nWO/OVQ3i5vn+DwOZDbK2bfH88wqwIqI4o1Ztw2MW8/kzNJZhqv4QA4Xdo0ULD2TO3X95E1iEnuQIJ0c26gIuVdfsrQviBDbmBTMR/JVE6yHQ=,iv:kZ+2R0+Z64zAZb7ePDdJfPlo/BMFyLpAxK+7ZiDoKFI=,tag:xbf7xOYuG+Msoicx5qjyNw==,type:str]
unencrypted_suffix: _unencrypted
version: 3.13.3
+21
View File
@@ -0,0 +1,21 @@
# USBGuard:
# The following line allow all USB devices until a proper policy is configured.
# Run `sudo usbguard generate-policy` with your devices plugged in,
# then set rules = "<output>" and switch implicitPolicyTarget to "block".
# services.usbguard.implicitPolicyTarget = lib.mkForce "allow";
{
services.usbguard = {
enable = true;
implicitPolicyTarget = "block";
IPCAllowedUsers = [
"root"
];
rules = ''
allow id 1d6b:0002 name "xHCI Host Controller"
allow id 0951:1666 name "DataTraveler 3.0"
allow id 1d6b:0003 name "xHCI Host Controller"
allow id 0461:574a name "HP 125 USB Optical Mouse"
allow id 0461:554a name "HP 125 Wired Keyboard"
'';
};
}
+39
View File
@@ -0,0 +1,39 @@
{
config,
lib,
...
}: {
imports = [
# Choose your theme here:
../../themes/nixy.nix
];
config.var = {
hostname = "h-work";
username = "hadrien";
configDirectory = "/home/" + config.var.username + "/.config/nixos"; # The path of the nixos configuration directory
keyboardLayout = "fr";
timeZone = "Europe/Paris";
defaultLocale = "en_US.UTF-8";
extraLocale = "fr_FR.UTF-8";
git = {
username = "Hadi";
email = "hadi@example.fr";
};
autoUpgrade = false;
autoGarbageCollector = true;
impermanenceEnabled = true;
};
# DON'T TOUCH THIS
options = {
var = lib.mkOption {
type = lib.types.attrs;
default = {};
};
};
}
@@ -1,4 +1,3 @@
# Kernel hardening for the server
{ {
boot.kernel.sysctl = { boot.kernel.sysctl = {
# Restrict access to kernel logs and pointers # Restrict access to kernel logs and pointers
@@ -9,6 +8,18 @@
"net.core.bpf_jit_harden" = 2; "net.core.bpf_jit_harden" = 2;
"kernel.unprivileged_bpf_disabled" = 1; "kernel.unprivileged_bpf_disabled" = 1;
# Restrict ptrace to parent processes only
"kernel.yama.ptrace_scope" = 1;
# Disable kexec (loading a new kernel at runtime)
"kernel.kexec_load_disabled" = 1;
# Disable magic SysRq key
"kernel.sysrq" = 0;
# Restrict access to /proc for non-root users
"kernel.perf_event_paranoid" = 3;
# Reverse path filtering (anti-spoofing) # Reverse path filtering (anti-spoofing)
"net.ipv4.conf.all.rp_filter" = 1; "net.ipv4.conf.all.rp_filter" = 1;
"net.ipv4.conf.default.rp_filter" = 1; "net.ipv4.conf.default.rp_filter" = 1;
@@ -29,7 +40,18 @@
# Don't send ICMP redirects # Don't send ICMP redirects
"net.ipv4.conf.all.send_redirects" = 0; "net.ipv4.conf.all.send_redirects" = 0;
# Restrict ptrace to parent processes only # Ignore bogus ICMP error responses
"kernel.yama.ptrace_scope" = 1; "net.ipv4.icmp_ignore_bogus_error_responses" = 1;
# Protect against time-wait assassination
"net.ipv4.tcp_rfc1337" = 1;
}; };
boot.kernelParams = [
"init_on_alloc=1" # zero freshly allocated kernel memory
"init_on_free=1" # zero freed kernel memory
"slab_nomerge" # don't merge slab caches of different sizes (harder heap grooming)
"page_alloc.shuffle=1" # randomize page allocator freelists
"randomize_kstack_offset=1" # randomize the kernel stack offset on syscall entry
];
} }
+27
View File
@@ -0,0 +1,27 @@
# Vulnix scans the Nix store against the NVD CVE feed to find packages with
# known vulnerabilities.
{pkgs, ...}: {
environment.systemPackages = [pkgs.vulnix];
systemd.services.vulnix-scan = {
description = "Scan the system closure for known vulnerabilities (vulnix)";
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.vulnix}/bin/vulnix --system --cache-dir /var/cache/vulnix";
CacheDirectory = "vulnix";
# vulnix exits non-zero when it finds vulnerabilities; that's expected,
# don't let systemd treat the scan itself as a failure.
SuccessExitStatus = "1 2";
};
};
systemd.timers.vulnix-scan = {
description = "Daily vulnix scan";
wantedBy = ["timers.target"];
timerConfig = {
OnCalendar = "daily";
Persistent = true;
RandomizedDelaySec = "1h";
};
};
}
-41
View File
@@ -1,41 +0,0 @@
{
config,
inputs,
lib,
...
}: let
inherit (import ./mk-container.nix {inherit lib config;}) mkContainer;
in {
imports = [
(mkContainer {
name = "wallpapers";
hostIp = "10.233.4.1";
containerIp = "10.233.4.2";
nixosConfig = {pkgs-unstable, ...}: {
services.nginx = {
enable = true;
virtualHosts."wallpapers" = {
root = "${inputs.awesome-wallpapers.packages.${pkgs-unstable.stdenv.hostPlatform.system}.default}/share/awesome-wallpapers";
listen = [
{
addr = "0.0.0.0";
port = 8080;
}
];
locations."/" = {
tryFiles = "$uri $uri/ /index.html";
};
extraConfig = ''
port_in_redirect off;
absolute_redirect off;
'';
};
};
networking.firewall.allowedTCPPorts = [8080];
system.stateVersion = "24.05";
};
})
];
services.cloudflared.tunnels."${config.var.tunnelId}".ingress."wallpapers.${config.var.domain}" = "http://10.233.4.2:8080";
}
@@ -7,13 +7,22 @@
in { in {
imports = [ imports = [
(mkContainer { (mkContainer {
name = "stirling-pdf"; name = "bentopdf";
hostIp = "10.233.9.1"; hostIp = "10.233.9.1";
containerIp = "10.233.9.2"; containerIp = "10.233.9.2";
nixosConfig = {...}: { nixosConfig = {...}: {
services.stirling-pdf = { services.bentopdf = {
enable = true; enable = true;
environment."SERVER_PORT" = "8080"; domain = "bentopdf";
nginx = {
enable = true;
virtualHost.listen = [
{
addr = "0.0.0.0";
port = 8080;
}
];
};
}; };
networking.firewall.allowedTCPPorts = [8080]; networking.firewall.allowedTCPPorts = [8080];
system.stateVersion = "24.05"; system.stateVersion = "24.05";
+2 -2
View File
@@ -74,9 +74,9 @@
icon = "sh:mazanoke"; icon = "sh:mazanoke";
} }
{ {
title = "Stirling PDF"; title = "BentoPDF";
url = "https://pdf.${domain}"; url = "https://pdf.${domain}";
icon = "sh:stirling-pdf"; icon = "sh:bentopdf";
} }
{ {
title = "Default-creds"; title = "Default-creds";
-64
View File
@@ -1,64 +0,0 @@
{
config,
inputs,
lib,
...
}: let
inherit (import ./mk-container.nix {inherit lib config;}) mkContainer;
in {
imports = [
(mkContainer {
name = "iky-prod";
hostIp = "10.233.1.1";
containerIp = "10.233.1.2";
internet = true;
bindMounts."/etc/iky/config.yaml" = {
hostPath = "/var/lib/iknowyou-prod/config.yaml";
isReadOnly = false;
};
nixosConfig = {...}: {
imports = [inputs.iknowyou.nixosModules.default];
users.users.iknowyou.uid = 999;
users.groups.iknowyou.gid = 999;
services.iknowyou = {
enable = true;
port = 8080;
openFirewall = true;
};
system.stateVersion = "24.05";
};
})
(mkContainer {
name = "iky-demo";
hostIp = "10.233.2.1";
containerIp = "10.233.2.2";
nixosConfig = {...}: {
imports = [inputs.iknowyou.nixosModules.default];
services.iknowyou = {
enable = true;
port = 8080;
openFirewall = true;
};
systemd.services.iknowyou.environment.IKY_DEMO = "true";
system.stateVersion = "24.05";
};
})
];
users.users.iknowyou = {
isSystemUser = true;
group = "iknowyou";
uid = 999;
};
users.groups.iknowyou.gid = 999;
systemd.tmpfiles.rules = [
"f /var/lib/iknowyou-prod/config.yaml 0600 iknowyou iknowyou -"
];
services.cloudflared.tunnels."${config.var.tunnelId}".ingress = {
"iknowyou-prod.${config.var.domain}" = "http://10.233.1.2:8080";
"iknowyou.${config.var.domain}" = "http://10.233.2.2:8080";
};
}
-26
View File
@@ -1,26 +0,0 @@
{
config,
lib,
...
}: let
inherit (import ./mk-container.nix {inherit lib config;}) mkContainer;
in {
imports = [
(mkContainer {
name = "mealie";
hostIp = "10.233.8.1";
containerIp = "10.233.8.2";
internet = true;
nixosConfig = {...}: {
services.mealie = {
enable = true;
port = 8080;
};
networking.firewall.allowedTCPPorts = [8080];
system.stateVersion = "24.05";
};
})
];
services.cloudflared.tunnels."${config.var.tunnelId}".ingress."mealie.${config.var.domain}" = "http://10.233.8.2:8080";
}
+1 -2
View File
@@ -39,8 +39,7 @@ in {
nginxHardening nginxHardening
]; ];
networking.nameservers = lib.mkIf internet [ networking.nameservers = lib.mkIf internet [
"1.1.1.1" "${hostIp}"
"1.0.0.1"
]; ];
}; };
}; };
-39
View File
@@ -1,39 +0,0 @@
{
config,
lib,
...
}: let
inherit (import ./mk-container.nix {inherit lib config;}) mkContainer;
in {
sops.secrets.umami-secret.mode = "0400";
imports = [
(mkContainer {
name = "umami";
hostIp = "10.233.10.1";
containerIp = "10.233.10.2";
bindMounts."/run/secrets/umami-secret" = {
hostPath = config.sops.secrets.umami-secret.path;
isReadOnly = true;
};
nixosConfig = {...}: {
services.umami = {
enable = true;
settings = {
PORT = 8080;
HOSTNAME = "0.0.0.0";
APP_SECRET_FILE = "/run/secrets/umami-secret";
DISABLE_TELEMETRY = true;
DISABLE_BOT_CHECK = true;
};
};
# PrivateUsers breaks systemd-creds inside nspawn containers (nested user namespaces)
systemd.services.umami.serviceConfig.PrivateUsers = lib.mkForce false;
networking.firewall.allowedTCPPorts = [8080];
system.stateVersion = "24.05";
};
})
];
services.cloudflared.tunnels."${config.var.tunnelId}".ingress."umami.${config.var.domain}" = "http://10.233.10.2:8080";
}
+1
View File
@@ -29,6 +29,7 @@ in
packages = with pkgs; packages = with pkgs;
[ [
doctoc doctoc
python3
] ]
++ hooks.enabledPackages; ++ hooks.enabledPackages;
+2 -2
View File
@@ -73,8 +73,8 @@
polarity = "dark"; polarity = "dark";
image = pkgs.fetchurl { image = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/main/app/static/wallpapers/another-one.png"; url = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/main/wallpapers/another-one.png";
sha256 = "sha256-zthfsd4QLShPPApV8RoPANaymMC5IiCrmp8QwyyhCcY="; sha256 = "sha256-bKke8RNz6qNxHSfLbU5xVVkG3tbFZW1sFjLB1hltcoI=";
}; };
}; };
} }