Initial commit
This commit is contained in:
23
README.md
Normal file
23
README.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Getting Started Guide
|
||||||
|
|
||||||
|
Steps you can follow after cloning this template:
|
||||||
|
|
||||||
|
- Be sure to read the [den documentation](https://vic.github.io/den)
|
||||||
|
|
||||||
|
- Update den input.
|
||||||
|
|
||||||
|
```console
|
||||||
|
nix flake update den
|
||||||
|
```
|
||||||
|
|
||||||
|
- Edit [modules/hosts.nix](modules/hosts.nix)
|
||||||
|
|
||||||
|
- Run the VM
|
||||||
|
|
||||||
|
We recommend to use a VM develop cycle so you can play with the system before applying to your hardware.
|
||||||
|
|
||||||
|
See [modules/vm.nix](modules/vm.nix)
|
||||||
|
|
||||||
|
```console
|
||||||
|
nix run .#vm
|
||||||
|
```
|
||||||
1913
facter-orion.json
Normal file
1913
facter-orion.json
Normal file
File diff suppressed because it is too large
Load Diff
614
flake.lock
generated
Normal file
614
flake.lock
generated
Normal file
@@ -0,0 +1,614 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"den": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772159674,
|
||||||
|
"narHash": "sha256-VvxXwezDpZoOY0O0pu72n1tTChnkAdjRsM72FlphL+w=",
|
||||||
|
"owner": "vic",
|
||||||
|
"repo": "den",
|
||||||
|
"rev": "311d77a3afee7c0f3cd3d4f494b5129b17c12aa2",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "vic",
|
||||||
|
"repo": "den",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"disko": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1771881364,
|
||||||
|
"narHash": "sha256-A5uE/hMium5of/QGC6JwF5TGoDAfpNtW00T0s9u/PN8=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "disko",
|
||||||
|
"rev": "a4cb7bf73f264d40560ba527f9280469f1f081c6",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "disko",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-aspects": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772159060,
|
||||||
|
"narHash": "sha256-enmt9g1FJGIBVzPcLa208nLP9QTUbRrJUXWT40GTQho=",
|
||||||
|
"owner": "vic",
|
||||||
|
"repo": "flake-aspects",
|
||||||
|
"rev": "88bac0fd89f3d9ce8f157debc57875ca470535e8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "vic",
|
||||||
|
"repo": "flake-aspects",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1751685974,
|
||||||
|
"narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=",
|
||||||
|
"ref": "refs/heads/main",
|
||||||
|
"rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
|
||||||
|
"revCount": 92,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.lix.systems/lix-project/flake-compat.git"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.lix.systems/lix-project/flake-compat.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-file": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772176329,
|
||||||
|
"narHash": "sha256-8MmT7QcVsRPlaJOSnJobqyDf3E/0q3kcgs6CJ6NkBw0=",
|
||||||
|
"owner": "vic",
|
||||||
|
"repo": "flake-file",
|
||||||
|
"rev": "1bf87eeb57ea517d4a6a96b4529f4f5d78a49e84",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "vic",
|
||||||
|
"repo": "flake-file",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-parts": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"nixpkgs-lib"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"nvf",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772164835,
|
||||||
|
"narHash": "sha256-zRcwrZDeBfYipqv/7K7TqsfPb87LFU6b7JhoNUGSnvQ=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "2a39b0828bbffce0d73769a61e46e780488d098b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"import-tree": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772159371,
|
||||||
|
"narHash": "sha256-AkfVgWWxt1pa1SlfKzcL1oQpMzgP70U3fBtzXqEGOms=",
|
||||||
|
"owner": "vic",
|
||||||
|
"repo": "import-tree",
|
||||||
|
"rev": "78c35e32f2b499c25e0671e41662537a6b1edbf0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "vic",
|
||||||
|
"repo": "import-tree",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mnw": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1770419553,
|
||||||
|
"narHash": "sha256-b1XqsH7AtVf2dXmq2iyRr2NC1yG7skY7Z6N2MpWHlK4=",
|
||||||
|
"owner": "Gerg-L",
|
||||||
|
"repo": "mnw",
|
||||||
|
"rev": "2aaffa8030d0b262176146adbb6b0e6374ce2957",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "Gerg-L",
|
||||||
|
"repo": "mnw",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ndg": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nvf",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1768214250,
|
||||||
|
"narHash": "sha256-hnBZDQWUxJV3KbtvyGW5BKLO/fAwydrxm5WHCWMQTbw=",
|
||||||
|
"owner": "feel-co",
|
||||||
|
"repo": "ndg",
|
||||||
|
"rev": "a6bd3c1ce2668d096e4fdaaa03ad7f03ba1fbca8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "feel-co",
|
||||||
|
"ref": "refs/tags/v2.6.0",
|
||||||
|
"repo": "ndg",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"niri": {
|
||||||
|
"inputs": {
|
||||||
|
"niri-stable": "niri-stable",
|
||||||
|
"niri-unstable": "niri-unstable",
|
||||||
|
"nixpkgs": "nixpkgs_3",
|
||||||
|
"nixpkgs-stable": "nixpkgs-stable",
|
||||||
|
"xwayland-satellite-stable": "xwayland-satellite-stable",
|
||||||
|
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772180467,
|
||||||
|
"narHash": "sha256-n6nZTXJRnpM4ST+poeynOasYm+XOASxHWXT/kLWI/lg=",
|
||||||
|
"owner": "sodiboo",
|
||||||
|
"repo": "niri-flake",
|
||||||
|
"rev": "68dcbb4f04e6fd8e7072cee1b30dba669d1c47ca",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "sodiboo",
|
||||||
|
"repo": "niri-flake",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"niri-stable": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1756556321,
|
||||||
|
"narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=",
|
||||||
|
"owner": "YaLTeR",
|
||||||
|
"repo": "niri",
|
||||||
|
"rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "YaLTeR",
|
||||||
|
"ref": "v25.08",
|
||||||
|
"repo": "niri",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"niri-unstable": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1771849386,
|
||||||
|
"narHash": "sha256-CFvjBjS2LxbBMR3Lu6wZhME6ck3CXyKUufRoJA5tlmw=",
|
||||||
|
"owner": "YaLTeR",
|
||||||
|
"repo": "niri",
|
||||||
|
"rev": "2dc6f4482c4eeed75ea8b133d89cad8658d38429",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "YaLTeR",
|
||||||
|
"repo": "niri",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix-auto-follow": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1754073254,
|
||||||
|
"narHash": "sha256-CQp/v2HQ7AtGJQqFGRZLHt4MZAK3NF94I6GDaRyhbsc=",
|
||||||
|
"owner": "fzakaria",
|
||||||
|
"repo": "nix-auto-follow",
|
||||||
|
"rev": "5baa00b79d4cc46523da0b8b3532c5163d151be4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "fzakaria",
|
||||||
|
"repo": "nix-auto-follow",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix-wrapper-modules": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs_4"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1771743990,
|
||||||
|
"narHash": "sha256-KNTuqLytdRE0MVhM1hd3IJTlcOG6In/6klbiEDWYOaA=",
|
||||||
|
"owner": "BirdeeHub",
|
||||||
|
"repo": "nix-wrapper-modules",
|
||||||
|
"rev": "0ea455457dac3de9129498f5c50a35153ab56484",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "BirdeeHub",
|
||||||
|
"repo": "nix-wrapper-modules",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixos-hardware": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1771969195,
|
||||||
|
"narHash": "sha256-qwcDBtrRvJbrrnv1lf/pREQi8t2hWZxVAyeMo7/E9sw=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixos-hardware",
|
||||||
|
"rev": "41c6b421bdc301b2624486e11905c9af7b8ec68e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "nixos-hardware",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1771207753,
|
||||||
|
"narHash": "sha256-b9uG8yN50DRQ6A7JdZBfzq718ryYrlmGgqkRm9OOwCE=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "d1c15b7d5806069da59e819999d70e1cec0760bf",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-stable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772047000,
|
||||||
|
"narHash": "sha256-7DaQVv4R97cii/Qdfy4tmDZMB2xxtyIvNGSwXBBhSmo=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "1267bb4920d0fc06ea916734c11b0bf004bbe17e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-25.11",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1770841267,
|
||||||
|
"narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1771848320,
|
||||||
|
"narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "2fc6539b481e1d2569f25f8799236694180c0993",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_4": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1771207753,
|
||||||
|
"narHash": "sha256-b9uG8yN50DRQ6A7JdZBfzq718ryYrlmGgqkRm9OOwCE=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "d1c15b7d5806069da59e819999d70e1cec0760bf",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_5": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772082373,
|
||||||
|
"narHash": "sha256-OgUF+EoJ36hz3jo8qBuizb8suT0mu1n7mzmcGdeOjWE=",
|
||||||
|
"rev": "26eaeac4e409d7b5a6bf6f90a2a2dc223c78d915",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre954674.26eaeac4e409/nixexprs.tar.xz"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_6": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1767767207,
|
||||||
|
"narHash": "sha256-Mj3d3PfwltLmukFal5i3fFt27L6NiKXdBezC1EBuZs4=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "5912c1772a44e31bf1c63c0390b90501e5026886",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_7": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1771008912,
|
||||||
|
"narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "a82ccc39b39b621151d6732718e3e250109076fa",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_8": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1771207753,
|
||||||
|
"narHash": "sha256-b9uG8yN50DRQ6A7JdZBfzq718ryYrlmGgqkRm9OOwCE=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "d1c15b7d5806069da59e819999d70e1cec0760bf",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"noctalia": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs_6",
|
||||||
|
"noctalia-qs": "noctalia-qs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772163795,
|
||||||
|
"narHash": "sha256-1Y5IrQIJ3MKY+yd5FeZejnko1wEKpTaF2r5qt6Sn1HU=",
|
||||||
|
"owner": "noctalia-dev",
|
||||||
|
"repo": "noctalia-shell",
|
||||||
|
"rev": "72cc11f98c7ccb75fe542a0034176de3710f1590",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "noctalia-dev",
|
||||||
|
"repo": "noctalia-shell",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"noctalia-qs": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"noctalia",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1771796397,
|
||||||
|
"narHash": "sha256-lbZkAMNQl5Ymqhdvp46K8hubZ7n7KQRPnTP5bNJzMSk=",
|
||||||
|
"owner": "noctalia-dev",
|
||||||
|
"repo": "noctalia-qs",
|
||||||
|
"rev": "1711c5a20b74a31b703394164c5d2d9561f13ee9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "noctalia-dev",
|
||||||
|
"repo": "noctalia-qs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nvf": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"flake-parts": "flake-parts_2",
|
||||||
|
"mnw": "mnw",
|
||||||
|
"ndg": "ndg",
|
||||||
|
"nixpkgs": "nixpkgs_7",
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772136464,
|
||||||
|
"narHash": "sha256-tkD/hT8goPEP4Jh03DzE7eqRqm74OzAjkRkbLKH4nM0=",
|
||||||
|
"owner": "notashelf",
|
||||||
|
"repo": "nvf",
|
||||||
|
"rev": "ace53a0ceea8bd5eb7325f63389ea4f28525db0c",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "notashelf",
|
||||||
|
"repo": "nvf",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"den": "den",
|
||||||
|
"disko": "disko",
|
||||||
|
"flake-aspects": "flake-aspects",
|
||||||
|
"flake-file": "flake-file",
|
||||||
|
"flake-parts": "flake-parts",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"import-tree": "import-tree",
|
||||||
|
"niri": "niri",
|
||||||
|
"nix-auto-follow": "nix-auto-follow",
|
||||||
|
"nix-wrapper-modules": "nix-wrapper-modules",
|
||||||
|
"nixos-hardware": "nixos-hardware",
|
||||||
|
"nixpkgs": "nixpkgs_5",
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"noctalia": "noctalia",
|
||||||
|
"nvf": "nvf",
|
||||||
|
"sops-nix": "sops-nix",
|
||||||
|
"systems": "systems_2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sops-nix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs_8"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772048434,
|
||||||
|
"narHash": "sha256-/wA0OaH6kZ/pFA+nXR/tvg5oupOmEDmMS5us79JT60o=",
|
||||||
|
"owner": "Mic92",
|
||||||
|
"repo": "sops-nix",
|
||||||
|
"rev": "334daa7c273dd8bf7a0cd370e4e16022b64e55e9",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"xwayland-satellite-stable": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1755491097,
|
||||||
|
"narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=",
|
||||||
|
"owner": "Supreeeme",
|
||||||
|
"repo": "xwayland-satellite",
|
||||||
|
"rev": "388d291e82ffbc73be18169d39470f340707edaa",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "Supreeeme",
|
||||||
|
"ref": "v0.7",
|
||||||
|
"repo": "xwayland-satellite",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"xwayland-satellite-unstable": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1771787042,
|
||||||
|
"narHash": "sha256-7bM6Y4KldhKnfopSALF8XALxcX7ehkomXH9sPl4MXp0=",
|
||||||
|
"owner": "Supreeeme",
|
||||||
|
"repo": "xwayland-satellite",
|
||||||
|
"rev": "33c344fee50504089a447a8fef5878cf4f6215fc",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "Supreeeme",
|
||||||
|
"repo": "xwayland-satellite",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
33
flake.nix
Normal file
33
flake.nix
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# DO-NOT-EDIT. This file was auto-generated using github:vic/flake-file.
|
||||||
|
# Use `nix run .#write-flake` to regenerate it.
|
||||||
|
{
|
||||||
|
|
||||||
|
outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./modules);
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
den.url = "github:vic/den";
|
||||||
|
disko.url = "github:nix-community/disko";
|
||||||
|
flake-aspects.url = "github:vic/flake-aspects";
|
||||||
|
flake-file.url = "github:vic/flake-file";
|
||||||
|
flake-parts = {
|
||||||
|
inputs.nixpkgs-lib.follows = "nixpkgs-lib";
|
||||||
|
url = "github:hercules-ci/flake-parts";
|
||||||
|
};
|
||||||
|
home-manager.url = "github:nix-community/home-manager";
|
||||||
|
import-tree.url = "github:vic/import-tree";
|
||||||
|
niri.url = "github:sodiboo/niri-flake";
|
||||||
|
nix-auto-follow = {
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
url = "github:fzakaria/nix-auto-follow";
|
||||||
|
};
|
||||||
|
nix-wrapper-modules.url = "github:BirdeeHub/nix-wrapper-modules";
|
||||||
|
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||||
|
nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
|
||||||
|
nixpkgs-lib.follows = "nixpkgs";
|
||||||
|
noctalia.url = "github:noctalia-dev/noctalia-shell";
|
||||||
|
nvf.url = "github:notashelf/nvf";
|
||||||
|
sops-nix.url = "github:Mic92/sops-nix";
|
||||||
|
systems.url = "github:nix-systems/default";
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
18
modules/bitwarden.nix
Normal file
18
modules/bitwarden.nix
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{ pkgs, config, ... }:
|
||||||
|
{
|
||||||
|
lux.bitwarden = {
|
||||||
|
homeManager =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.bitwarden-desktop ];
|
||||||
|
programs.rbw = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
base_url = "https://vault.jelles.net";
|
||||||
|
email = "mail@jelles.net";
|
||||||
|
pinentry = pkgs.pinentry-qt;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
12
modules/defaults.nix
Normal file
12
modules/defaults.nix
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{ den, ... }:
|
||||||
|
{
|
||||||
|
den.default.includes = [
|
||||||
|
den._.define-user
|
||||||
|
den._.home-manager
|
||||||
|
];
|
||||||
|
|
||||||
|
den.default.nixos = {
|
||||||
|
users.mutableUsers = false;
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
15
modules/dendritic.nix
Normal file
15
modules/dendritic.nix
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(inputs.flake-file.flakeModules.dendritic or { })
|
||||||
|
(inputs.den.flakeModules.dendritic or { })
|
||||||
|
(inputs.den.namespace "lux" true)
|
||||||
|
];
|
||||||
|
|
||||||
|
# other inputs may be defined at a module using them.
|
||||||
|
flake-file.inputs = {
|
||||||
|
den.url = "github:vic/den";
|
||||||
|
flake-file.url = "github:vic/flake-file";
|
||||||
|
home-manager.url = "github:nix-community/home-manager";
|
||||||
|
};
|
||||||
|
}
|
||||||
21
modules/dev.nix
Normal file
21
modules/dev.nix
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
lux.dev = {
|
||||||
|
homeManager = {
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
# TODO: Don't hardcode name and mail
|
||||||
|
user.name = "kiri";
|
||||||
|
user.email = "mail@jelles.net";
|
||||||
|
init.defaultBranch = "main";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.direnv = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
nix-direnv.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
114
modules/email.nix
Normal file
114
modules/email.nix
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
lux.email = {
|
||||||
|
homeManager =
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
programs.thunderbird = {
|
||||||
|
enable = true;
|
||||||
|
profiles.kiri = {
|
||||||
|
isDefault = true;
|
||||||
|
withExternalGnupg = true;
|
||||||
|
settings = {
|
||||||
|
# LAYOUT: Force 3-Pane Vertical View (Folders | List | Message)
|
||||||
|
"mail.ui.display.message_pane_vertical" = true;
|
||||||
|
|
||||||
|
# APPEARANCE: Enable "Cards View" (modern multi-line list)
|
||||||
|
# Note: 'cards' is the value for the new view
|
||||||
|
"mail.ui.display.thread_pane_view_type" = "cards";
|
||||||
|
|
||||||
|
# DENSITY: "Compact" is usually cleaner for tech-savvy users
|
||||||
|
"mail.uidensity" = 1; # 0=Default, 1=Compact, 2=Touch
|
||||||
|
|
||||||
|
# PRIVACY & CLEANUP
|
||||||
|
"privacy.donottrackheader.enabled" = true;
|
||||||
|
"mail.server.server2.hidden" = true; # Hide "Local Folders"
|
||||||
|
|
||||||
|
# Start page disable for faster boot
|
||||||
|
"mailnews.start_page.enabled" = false;
|
||||||
|
|
||||||
|
# Disable the "Get a new email address" feature in account manager
|
||||||
|
"mail.provider.enabled" = false;
|
||||||
|
|
||||||
|
"layout.css.devPixelsPerPx" = 0.85;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
accounts.email.accounts = {
|
||||||
|
main = {
|
||||||
|
enable = true;
|
||||||
|
primary = true;
|
||||||
|
address = "mail@jelles.net";
|
||||||
|
imap = {
|
||||||
|
authentication = "plain";
|
||||||
|
host = "taylor.mxrouting.net";
|
||||||
|
port = 993;
|
||||||
|
tls.enable = true;
|
||||||
|
};
|
||||||
|
realName = "Jelle Spreeuwenberg";
|
||||||
|
smtp = {
|
||||||
|
authentication = "plain";
|
||||||
|
host = "taylor.mxrouting.net";
|
||||||
|
port = 465;
|
||||||
|
tls.enable = true;
|
||||||
|
};
|
||||||
|
userName = "mail@jelles.net";
|
||||||
|
|
||||||
|
thunderbird.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
old = {
|
||||||
|
enable = true;
|
||||||
|
address = "mail@jellespreeuwenberg.nl";
|
||||||
|
imap = {
|
||||||
|
authentication = "plain";
|
||||||
|
host = "taylor.mxrouting.net";
|
||||||
|
port = 993;
|
||||||
|
tls.enable = true;
|
||||||
|
};
|
||||||
|
realName = "Jelle Spreeuwenberg";
|
||||||
|
smtp = {
|
||||||
|
authentication = "plain";
|
||||||
|
host = "taylor.mxrouting.net";
|
||||||
|
port = 465;
|
||||||
|
tls.enable = true;
|
||||||
|
};
|
||||||
|
userName = "mail@jellespreeuwenberg.nl";
|
||||||
|
|
||||||
|
thunderbird.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
uni = {
|
||||||
|
enable = true;
|
||||||
|
flavor = "outlook.office365.com";
|
||||||
|
address = "j.spreeuwenberg@student.tue.nl";
|
||||||
|
realName = "Jelle Spreeuwenberg";
|
||||||
|
userName = "j.spreeuwenberg@student.tue.nl";
|
||||||
|
thunderbird = {
|
||||||
|
enable = true;
|
||||||
|
settings = id: {
|
||||||
|
"mail.smtpserver.smtp_${id}.authMethod" = 10;
|
||||||
|
"mail.server.server_${id}.authMethod" = 10;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
work = {
|
||||||
|
enable = true;
|
||||||
|
flavor = "outlook.office365.com";
|
||||||
|
address = "jelle.spreeuwenberg@yookr.org";
|
||||||
|
realName = "Jelle Spreeuwenberg";
|
||||||
|
userName = "jelle.spreeuwenberg@yookr.org";
|
||||||
|
thunderbird = {
|
||||||
|
enable = true;
|
||||||
|
settings = id: {
|
||||||
|
"mail.smtpserver.smtp_${id}.authMethod" = 10;
|
||||||
|
"mail.server.server_${id}.authMethod" = 10;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
6
modules/flake-file.nix
Normal file
6
modules/flake-file.nix
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
inputs.flake-file.flakeModules.nix-auto-follow
|
||||||
|
];
|
||||||
|
}
|
||||||
12
modules/helium.nix
Normal file
12
modules/helium.nix
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
lux.helium = {
|
||||||
|
homeManager =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [
|
||||||
|
(pkgs.callPackage ../programs/helium.nix { })
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
29
modules/hosts.nix
Normal file
29
modules/hosts.nix
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{ den, ... }:
|
||||||
|
{
|
||||||
|
den.hosts.x86_64-linux = {
|
||||||
|
polaris.users.kiri = {
|
||||||
|
syncthingId = "6HBAKXB-DB3B4H2-BODCAXF-KD23H5W-6X5LGLC-ZJHZHLG-7U7YMGO-BB6IXQ3";
|
||||||
|
};
|
||||||
|
orion.users.kiri = {
|
||||||
|
syncthingId = "NNRNQKZ-OWPHSVA-B6KKBHE-SDYLSTV-7SVHGPR-NEWLKPL-4MWNJG4-G5FHUAI";
|
||||||
|
};
|
||||||
|
altair.users.kiri = {
|
||||||
|
syncthingId = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Set hostname for each host
|
||||||
|
den.default.includes =
|
||||||
|
let
|
||||||
|
setHostname =
|
||||||
|
{ host, ... }:
|
||||||
|
{
|
||||||
|
nixos = {
|
||||||
|
networking.hostName = host.hostName;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
[
|
||||||
|
setHostname
|
||||||
|
];
|
||||||
|
}
|
||||||
32
modules/keys.nix
Normal file
32
modules/keys.nix
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
lux.ssh = {
|
||||||
|
homeManager =
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
programs.gpg = {
|
||||||
|
enable = true;
|
||||||
|
homedir = "${config.xdg.dataHome}/gnupg";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.gpg-agent = {
|
||||||
|
enable = true;
|
||||||
|
enableSshSupport = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
pinentry.package = pkgs.pinentry-qt;
|
||||||
|
sshKeys = [
|
||||||
|
"CD848796822630B280FC6DFA55F24A20040F22B5"
|
||||||
|
"B8FBDFBD7F42C444C17E086E0EE2E34FB43A7187"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.ssh = {
|
||||||
|
enable = true;
|
||||||
|
enableDefaultConfig = false;
|
||||||
|
includes = [
|
||||||
|
"/home/kiri/.ssh/ssh-config-orion"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
16
modules/kiri.nix
Normal file
16
modules/kiri.nix
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{ den, ... }:
|
||||||
|
{
|
||||||
|
den.aspects.kiri = {
|
||||||
|
includes = [
|
||||||
|
den._.primary-user
|
||||||
|
(den._.user-shell "zsh")
|
||||||
|
den.ful.lux.syncthing
|
||||||
|
];
|
||||||
|
|
||||||
|
nixos =
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
users.users.kiri.hashedPasswordFile = config.sops.secrets.hashed-password-kiri.path;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
180
modules/neovim/default.nix
Normal file
180
modules/neovim/default.nix
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
flake-file.inputs.nix-wrapper-modules.url = "github:BirdeeHub/nix-wrapper-modules";
|
||||||
|
lux.neovim.homeManager =
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
(inputs.nix-wrapper-modules.lib.mkInstallModule {
|
||||||
|
name = "neovim";
|
||||||
|
value = inputs.nix-wrapper-modules.lib.wrapperModules.neovim;
|
||||||
|
loc = [
|
||||||
|
"home"
|
||||||
|
"packages"
|
||||||
|
];
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
wrappers.neovim = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# 1. Point to your existing Lua config directory
|
||||||
|
settings.config_directory = ./lua-config;
|
||||||
|
|
||||||
|
# 2. Runtime Dependencies (from lspsAndRuntimeDeps)
|
||||||
|
# These are added to the PATH of the wrapper
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
# Tools
|
||||||
|
universal-ctags
|
||||||
|
ripgrep
|
||||||
|
fd
|
||||||
|
tree-sitter
|
||||||
|
wl-clipboard
|
||||||
|
# LSPs & Formatters
|
||||||
|
stylua
|
||||||
|
lua-language-server
|
||||||
|
nixd
|
||||||
|
nix-doc
|
||||||
|
nixfmt
|
||||||
|
dafny
|
||||||
|
typescript
|
||||||
|
typescript-language-server
|
||||||
|
rustc
|
||||||
|
rust-analyzer
|
||||||
|
rustfmt
|
||||||
|
markdownlint-cli2
|
||||||
|
astro-language-server
|
||||||
|
tinymist
|
||||||
|
typstyle
|
||||||
|
|
||||||
|
# ty
|
||||||
|
# basedpyright
|
||||||
|
ty
|
||||||
|
ruff
|
||||||
|
];
|
||||||
|
|
||||||
|
# 3. Plugins (from startupPlugins & optionalPlugins)
|
||||||
|
# Since you use lz.n in Lua, we just list them all here.
|
||||||
|
# The wrapper will add them to the packpath.
|
||||||
|
specs = {
|
||||||
|
# Core lazy-loading plugin
|
||||||
|
lz-n = {
|
||||||
|
data = pkgs.vimPlugins.lz-n;
|
||||||
|
};
|
||||||
|
plenary = {
|
||||||
|
data = pkgs.vimPlugins.plenary-nvim;
|
||||||
|
};
|
||||||
|
|
||||||
|
# All other plugins
|
||||||
|
general = {
|
||||||
|
data = with pkgs.vimPlugins; [
|
||||||
|
nvim-treesitter.withAllGrammars
|
||||||
|
nvim-treesitter-textobjects
|
||||||
|
nvim-treesitter-context
|
||||||
|
trouble-nvim
|
||||||
|
guess-indent-nvim
|
||||||
|
gitsigns-nvim
|
||||||
|
which-key-nvim
|
||||||
|
telescope-nvim
|
||||||
|
telescope-fzf-native-nvim
|
||||||
|
telescope-ui-select-nvim
|
||||||
|
conform-nvim
|
||||||
|
blink-cmp
|
||||||
|
luasnip
|
||||||
|
friendly-snippets
|
||||||
|
todo-comments-nvim
|
||||||
|
mini-nvim
|
||||||
|
nvim-lspconfig
|
||||||
|
lazydev-nvim
|
||||||
|
nvim-autopairs
|
||||||
|
indent-blankline-nvim
|
||||||
|
nvim-lint
|
||||||
|
render-markdown-nvim
|
||||||
|
colorful-menu-nvim
|
||||||
|
lualine-nvim
|
||||||
|
bufferline-nvim
|
||||||
|
zen-mode-nvim
|
||||||
|
kanagawa-nvim
|
||||||
|
project-nvim
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# 4. Passing Data to Lua (Replacing nixCats.extra)
|
||||||
|
# We put these in `settings` so they appear in require('nix-info').settings
|
||||||
|
settings = {
|
||||||
|
# Hostname/ConfigDir needed for nixd
|
||||||
|
# NOTE: Adjust these paths to match your actual denful/flake variables
|
||||||
|
nixdExtras = {
|
||||||
|
nixpkgs = "import ${pkgs.path} {}";
|
||||||
|
# Assuming you have access to the flake path in your config,
|
||||||
|
# otherwise hardcode or pass via specialArgs
|
||||||
|
nixos_options = ''(builtins.getFlake "path://${config.home.homeDirectory}/.config/nixos").nixosConfigurations.polaris.config.networking.hostName}.options'';
|
||||||
|
home_manager_options = ''(builtins.getFlake "path://${config.home.homeDirectory}/.config/nixos").nixosConfigurations.polaris.config.networking.hostName}.options.home-manager.users.type.getSubOptions []'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# TODO: Put in separate theme file
|
||||||
|
themeSetup = # lua
|
||||||
|
''
|
||||||
|
require("kanagawa").setup({
|
||||||
|
colors = {
|
||||||
|
theme = {
|
||||||
|
all = {
|
||||||
|
ui = {
|
||||||
|
bg_gutter = "none"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
overrides = function(colors)
|
||||||
|
local theme = colors.theme
|
||||||
|
|
||||||
|
local makeDiagnosticColor = function(color)
|
||||||
|
local c = require("kanagawa.lib.color")
|
||||||
|
return { fg = color, bg = c(color):blend(theme.ui.bg, 0.95):to_hex() }
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
TelescopeTitle = { fg = theme.ui.special, bold = true },
|
||||||
|
TelescopePromptNormal = { bg = theme.ui.bg_p1 },
|
||||||
|
TelescopePromptBorder = { fg = theme.ui.bg_p1, bg = theme.ui.bg_p1 },
|
||||||
|
TelescopeResultsNormal = { fg = theme.ui.fg_dim, bg = theme.ui.bg_m1 },
|
||||||
|
TelescopeResultsBorder = { fg = theme.ui.bg_m1, bg = theme.ui.bg_m1 },
|
||||||
|
TelescopePreviewNormal = { bg = theme.ui.bg_dim },
|
||||||
|
TelescopePreviewBorder = { bg = theme.ui.bg_dim, fg = theme.ui.bg_dim },
|
||||||
|
|
||||||
|
Pmenu = { fg = theme.ui.shade0, bg = theme.ui.bg_p1 }, -- add `blend = vim.o.pumblend` to enable transparency
|
||||||
|
PmenuSel = { fg = "NONE", bg = theme.ui.bg_p2 },
|
||||||
|
PmenuSbar = { bg = theme.ui.bg_m1 },
|
||||||
|
PmenuThumb = { bg = theme.ui.bg_p2 },
|
||||||
|
|
||||||
|
DiagnosticVirtualTextHint = makeDiagnosticColor(theme.diag.hint),
|
||||||
|
DiagnosticVirtualTextInfo = makeDiagnosticColor(theme.diag.info),
|
||||||
|
DiagnosticVirtualTextWarn = makeDiagnosticColor(theme.diag.warning),
|
||||||
|
DiagnosticVirtualTextError = makeDiagnosticColor(theme.diag.error),
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.cmd.colorscheme("kanagawa-wave")
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
# 5. Wrapper Configuration
|
||||||
|
# Enable Python/Node providers
|
||||||
|
hosts.python3.nvim-host.enable = true;
|
||||||
|
hosts.node.nvim-host.enable = true;
|
||||||
|
|
||||||
|
# Ensure the bin name matches what you expect
|
||||||
|
binName = "nvim";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
5
modules/neovim/lua-config/init.lua
Normal file
5
modules/neovim/lua-config/init.lua
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
require("options")
|
||||||
|
require("plugins.ui")
|
||||||
|
require("plugins.editor")
|
||||||
|
require("plugins.coding")
|
||||||
|
require("plugins.lsp")
|
||||||
138
modules/neovim/lua-config/lua/options.lua
Normal file
138
modules/neovim/lua-config/lua/options.lua
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
-- Set <space> as the leader key
|
||||||
|
-- See `:help mapleader`
|
||||||
|
-- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used)
|
||||||
|
vim.g.mapleader = " "
|
||||||
|
vim.g.maplocalleader = " "
|
||||||
|
|
||||||
|
-- [[ Setting options ]]
|
||||||
|
-- See `:help vim.o`
|
||||||
|
-- NOTE: You can change these options as you wish!
|
||||||
|
-- For more options, you can see `:help option-list`
|
||||||
|
|
||||||
|
vim.o.expandtab = true
|
||||||
|
vim.o.shiftwidth = 2
|
||||||
|
vim.o.tabstop = 2
|
||||||
|
vim.o.softtabstop = 2
|
||||||
|
|
||||||
|
-- Make line numbers default
|
||||||
|
vim.o.number = true
|
||||||
|
-- You can also add relative line numbers, to help with jumping.
|
||||||
|
-- Experiment for yourself to see if you like it!
|
||||||
|
-- vim.o.relativenumber = true
|
||||||
|
|
||||||
|
-- Enable mouse mode, can be useful for resizing splits for example!
|
||||||
|
vim.o.mouse = "a"
|
||||||
|
|
||||||
|
-- Don't show the mode, since it's already in the status line
|
||||||
|
vim.o.showmode = false
|
||||||
|
|
||||||
|
vim.opt.shortmess:append("Wc")
|
||||||
|
|
||||||
|
-- Sync clipboard between OS and Neovim.
|
||||||
|
-- Schedule the setting after `UiEnter` because it can increase startup-time.
|
||||||
|
-- Remove this option if you want your OS clipboard to remain independent.
|
||||||
|
-- See `:help 'clipboard'`
|
||||||
|
vim.schedule(function()
|
||||||
|
vim.o.clipboard = "unnamedplus"
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Enable break indent
|
||||||
|
vim.o.breakindent = true
|
||||||
|
|
||||||
|
-- Save undo history
|
||||||
|
vim.o.undofile = true
|
||||||
|
|
||||||
|
-- Case-insensitive searching UNLESS \C or one or more capital letters in the search term
|
||||||
|
vim.o.ignorecase = true
|
||||||
|
vim.o.smartcase = true
|
||||||
|
|
||||||
|
-- Keep signcolumn on by default
|
||||||
|
vim.o.signcolumn = "yes"
|
||||||
|
|
||||||
|
-- Decrease update time
|
||||||
|
vim.o.updatetime = 250
|
||||||
|
|
||||||
|
-- Decrease mapped sequence wait time
|
||||||
|
vim.o.timeoutlen = 300
|
||||||
|
|
||||||
|
-- Configure how new splits should be opened
|
||||||
|
vim.o.splitright = true
|
||||||
|
vim.o.splitbelow = true
|
||||||
|
|
||||||
|
-- Sets how neovim will display certain whitespace characters in the editor.
|
||||||
|
-- See `:help 'list'`
|
||||||
|
-- and `:help 'listchars'`
|
||||||
|
--
|
||||||
|
-- Notice listchars is set using `vim.opt` instead of `vim.o`.
|
||||||
|
-- It is very similar to `vim.o` but offers an interface for conveniently interacting with tables.
|
||||||
|
-- See `:help lua-options`
|
||||||
|
-- and `:help lua-options-guide`
|
||||||
|
vim.o.list = true
|
||||||
|
vim.opt.listchars = { tab = "» ", trail = "·", nbsp = "␣" }
|
||||||
|
|
||||||
|
-- Preview substitutions live, as you type!
|
||||||
|
vim.o.inccommand = "split"
|
||||||
|
|
||||||
|
-- Show which line your cursor is on
|
||||||
|
vim.o.cursorline = true
|
||||||
|
|
||||||
|
-- Minimal number of screen lines to keep above and below the cursor.
|
||||||
|
vim.o.scrolloff = 10
|
||||||
|
|
||||||
|
-- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`),
|
||||||
|
-- instead raise a dialog asking if you wish to save the current file(s)
|
||||||
|
-- See `:help 'confirm'`
|
||||||
|
vim.o.confirm = true
|
||||||
|
|
||||||
|
-- [[ Basic Keymaps ]]
|
||||||
|
-- See `:help vim.keymap.set()`
|
||||||
|
|
||||||
|
-- Clear highlights on search when pressing <Esc> in normal mode
|
||||||
|
-- See `:help hlsearch`
|
||||||
|
vim.keymap.set("n", "<Esc>", "<cmd>nohlsearch<CR>")
|
||||||
|
|
||||||
|
-- Diagnostic keymaps
|
||||||
|
vim.keymap.set("n", "<leader>q", vim.diagnostic.setloclist, { desc = "Open diagnostic [Q]uickfix list" })
|
||||||
|
|
||||||
|
-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
|
||||||
|
-- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which
|
||||||
|
-- is not what someone will guess without a bit more experience.
|
||||||
|
--
|
||||||
|
-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
|
||||||
|
-- or just use <C-\><C-n> to exit terminal mode
|
||||||
|
vim.keymap.set("t", "<Esc><Esc>", "<C-\\><C-n>", { desc = "Exit terminal mode" })
|
||||||
|
|
||||||
|
-- TIP: Disable arrow keys in normal mode
|
||||||
|
-- vim.keymap.set('n', '<left>', '<cmd>echo "Use h to move!!"<CR>')
|
||||||
|
-- vim.keymap.set('n', '<right>', '<cmd>echo "Use l to move!!"<CR>')
|
||||||
|
-- vim.keymap.set('n', '<up>', '<cmd>echo "Use k to move!!"<CR>')
|
||||||
|
-- vim.keymap.set('n', '<down>', '<cmd>echo "Use j to move!!"<CR>')
|
||||||
|
|
||||||
|
-- Keybinds to make split navigation easier.
|
||||||
|
-- Use CTRL+<hjkl> to switch between windows
|
||||||
|
--
|
||||||
|
-- See `:help wincmd` for a list of all window commands
|
||||||
|
vim.keymap.set("n", "<C-h>", "<C-w><C-h>", { desc = "Move focus to the left window" })
|
||||||
|
vim.keymap.set("n", "<C-l>", "<C-w><C-l>", { desc = "Move focus to the right window" })
|
||||||
|
vim.keymap.set("n", "<C-j>", "<C-w><C-j>", { desc = "Move focus to the lower window" })
|
||||||
|
vim.keymap.set("n", "<C-k>", "<C-w><C-k>", { desc = "Move focus to the upper window" })
|
||||||
|
|
||||||
|
-- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes
|
||||||
|
-- vim.keymap.set("n", "<C-S-h>", "<C-w>H", { desc = "Move window to the left" })
|
||||||
|
-- vim.keymap.set("n", "<C-S-l>", "<C-w>L", { desc = "Move window to the right" })
|
||||||
|
-- vim.keymap.set("n", "<C-S-j>", "<C-w>J", { desc = "Move window to the lower" })
|
||||||
|
-- vim.keymap.set("n", "<C-S-k>", "<C-w>K", { desc = "Move window to the upper" })
|
||||||
|
|
||||||
|
-- [[ Basic Autocommands ]]
|
||||||
|
-- See `:help lua-guide-autocommands`
|
||||||
|
|
||||||
|
-- Highlight when yanking (copying) text
|
||||||
|
-- Try it with `yap` in normal mode
|
||||||
|
-- See `:help vim.hl.on_yank()`
|
||||||
|
vim.api.nvim_create_autocmd("TextYankPost", {
|
||||||
|
desc = "Highlight when yanking (copying) text",
|
||||||
|
group = vim.api.nvim_create_augroup("kickstart-highlight-yank", { clear = true }),
|
||||||
|
callback = function()
|
||||||
|
vim.hl.on_yank()
|
||||||
|
end,
|
||||||
|
})
|
||||||
230
modules/neovim/lua-config/lua/plugins/coding.lua
Normal file
230
modules/neovim/lua-config/lua/plugins/coding.lua
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
require("lz.n").load({
|
||||||
|
-- {
|
||||||
|
-- "nvim-treesitter-context",
|
||||||
|
-- event = "BufReadPost",
|
||||||
|
-- after = function()
|
||||||
|
-- require("treesitter-context").setup({
|
||||||
|
-- enable = true,
|
||||||
|
-- max_lines = 3, -- How many lines the window should span
|
||||||
|
-- })
|
||||||
|
-- end,
|
||||||
|
-- },
|
||||||
|
{
|
||||||
|
"nvim-lint",
|
||||||
|
event = { "BufReadPre", "BufNewFile" },
|
||||||
|
after = function()
|
||||||
|
local lint = require("lint")
|
||||||
|
lint.linters_by_ft = {
|
||||||
|
markdown = { "markdownlint-cli2" },
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Create autocommand which carries out the actual linting
|
||||||
|
-- on the specified events.
|
||||||
|
local lint_augroup = vim.api.nvim_create_augroup("lint", { clear = true })
|
||||||
|
vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost", "InsertLeave" }, {
|
||||||
|
group = lint_augroup,
|
||||||
|
callback = function()
|
||||||
|
-- Only run the linter in buffers that you can modify in order to
|
||||||
|
-- avoid superfluous noise, notably within the handy LSP pop-ups that
|
||||||
|
-- describe the hovered symbol using Markdown.
|
||||||
|
if vim.bo.modifiable then
|
||||||
|
lint.try_lint()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nvim-autopairs",
|
||||||
|
event = "InsertEnter",
|
||||||
|
after = function()
|
||||||
|
require("nvim-autopairs").setup({
|
||||||
|
check_ts = true,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nvim-treesitter",
|
||||||
|
dep_of = "render-markdown.nvim",
|
||||||
|
-- cmd = { "" },
|
||||||
|
event = "DeferredUIEnter",
|
||||||
|
-- ft = "",
|
||||||
|
-- keys = "",
|
||||||
|
-- colorscheme = "",
|
||||||
|
load = function(name)
|
||||||
|
vim.cmd.packadd(name)
|
||||||
|
end,
|
||||||
|
after = function()
|
||||||
|
-- [[ Configure Treesitter ]]
|
||||||
|
-- See `:help nvim-treesitter`
|
||||||
|
require("nvim-treesitter.configs").setup({
|
||||||
|
highlight = { enable = true },
|
||||||
|
indent = { enable = true },
|
||||||
|
incremental_selection = {
|
||||||
|
enable = true,
|
||||||
|
keymaps = {
|
||||||
|
init_selection = "<c-space>",
|
||||||
|
node_incremental = "<c-space>",
|
||||||
|
scope_incremental = "<c-s>",
|
||||||
|
node_decremental = "<M-space>",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"conform.nvim",
|
||||||
|
event = "BufWritePre",
|
||||||
|
cmd = "ConformInfo",
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>f",
|
||||||
|
function()
|
||||||
|
require("conform").format({ async = true, lsp_format = "fallback" })
|
||||||
|
end,
|
||||||
|
mode = "",
|
||||||
|
desc = "[F]ormat buffer",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
after = function()
|
||||||
|
require("conform").setup({
|
||||||
|
notify_on_error = true,
|
||||||
|
format_on_save = function(bufnr)
|
||||||
|
-- Disable "format_on_save lsp_fallback" for languages that don't
|
||||||
|
-- have a well standardized coding style. You can add additional
|
||||||
|
-- languages here or re-enable it for the disabled ones.
|
||||||
|
local disable_filetypes = { c = true, cpp = true }
|
||||||
|
if disable_filetypes[vim.bo[bufnr].filetype] then
|
||||||
|
return nil
|
||||||
|
else
|
||||||
|
return {
|
||||||
|
timeout_ms = 500,
|
||||||
|
lsp_format = "fallback",
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
formatters_by_ft = {
|
||||||
|
lua = { "stylua" },
|
||||||
|
-- Conform can also run multiple formatters sequentially
|
||||||
|
python = { "isort", "black" },
|
||||||
|
--
|
||||||
|
-- You can use 'stop_after_first' to run the first available formatter from the list
|
||||||
|
-- javascript = { "prettierd", "prettier", stop_after_first = true },
|
||||||
|
},
|
||||||
|
formatters = {
|
||||||
|
stylua = {
|
||||||
|
prepend_args = { "--indent-type", "Spaces", "--indent-width", "2" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"friendly-snippets",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"luasnip",
|
||||||
|
before = function()
|
||||||
|
require("lz.n").trigger_load("friendly-snippets")
|
||||||
|
end,
|
||||||
|
after = function()
|
||||||
|
require("luasnip.loaders.from_vscode").lazy_load()
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
-- lazydev makes your lsp way better in your config without needing extra lsp configuration.
|
||||||
|
"lazydev.nvim",
|
||||||
|
cmd = "LazyDev",
|
||||||
|
ft = "lua",
|
||||||
|
after = function()
|
||||||
|
require("lazydev").setup({
|
||||||
|
library = {
|
||||||
|
{ words = { "nixCats", "settings" }, path = "nix-info" },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blink.cmp",
|
||||||
|
before = function()
|
||||||
|
-- Trigger lazydev so it's ready for blink source
|
||||||
|
require("lz.n").trigger_load({ "lazydev.nvim", "luasnip" })
|
||||||
|
end,
|
||||||
|
after = function()
|
||||||
|
require("blink.cmp").setup({
|
||||||
|
keymap = {
|
||||||
|
preset = "default",
|
||||||
|
|
||||||
|
-- [Up/Down]
|
||||||
|
["<C-j>"] = { "select_next", "fallback" },
|
||||||
|
["<C-k>"] = { "select_prev", "fallback" }, -- Overrides Signature Help
|
||||||
|
|
||||||
|
-- [Insert Suggestion]
|
||||||
|
["<tab>"] = { "select_and_accept", "fallback" },
|
||||||
|
|
||||||
|
-- [Remap Signature Help]
|
||||||
|
-- Since we took <C-k>, let's move signature help to <C-g> (optional)
|
||||||
|
["<C-g>"] = { "show_signature", "hide_signature", "fallback" },
|
||||||
|
},
|
||||||
|
|
||||||
|
appearance = {
|
||||||
|
nerd_font_variant = "mono",
|
||||||
|
},
|
||||||
|
|
||||||
|
completion = {
|
||||||
|
-- By default, you may press `<c-space>` to show the documentation.
|
||||||
|
-- Optionally, set `auto_show = true` to show the documentation after a delay.
|
||||||
|
documentation = {
|
||||||
|
auto_show = true,
|
||||||
|
auto_show_delay_ms = 500,
|
||||||
|
},
|
||||||
|
menu = {
|
||||||
|
draw = {
|
||||||
|
columns = { { "kind_icon" }, { "label", gap = 1 } },
|
||||||
|
components = {
|
||||||
|
label = {
|
||||||
|
text = function(ctx)
|
||||||
|
return require("colorful-menu").blink_components_text(ctx)
|
||||||
|
end,
|
||||||
|
highlight = function(ctx)
|
||||||
|
return require("colorful-menu").blink_components_highlight(ctx)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
cmdline = {
|
||||||
|
completion = {
|
||||||
|
menu = {
|
||||||
|
auto_show = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keymap = { preset = "inherit" },
|
||||||
|
},
|
||||||
|
|
||||||
|
sources = {
|
||||||
|
default = {
|
||||||
|
"lsp",
|
||||||
|
"path",
|
||||||
|
"snippets",
|
||||||
|
"lazydev",
|
||||||
|
},
|
||||||
|
providers = {
|
||||||
|
lazydev = { module = "lazydev.integrations.blink", score_offset = 100 },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
snippets = { preset = "luasnip" },
|
||||||
|
|
||||||
|
fuzzy = { implementation = "prefer_rust_with_warning" },
|
||||||
|
|
||||||
|
-- Shows a signature help window while you type arguments for a function
|
||||||
|
signature = {
|
||||||
|
enabled = true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
})
|
||||||
240
modules/neovim/lua-config/lua/plugins/editor.lua
Normal file
240
modules/neovim/lua-config/lua/plugins/editor.lua
Normal file
@@ -0,0 +1,240 @@
|
|||||||
|
require("lz.n").load({
|
||||||
|
{
|
||||||
|
"project.nvim",
|
||||||
|
name = "project-nvim",
|
||||||
|
event = { "VimEnter" }, -- Load early to set root correctly
|
||||||
|
after = function()
|
||||||
|
require("project").setup({
|
||||||
|
-- 1. Automagically change directory to project root
|
||||||
|
manual_mode = false,
|
||||||
|
|
||||||
|
-- Methods to detect the root directory
|
||||||
|
detection_methods = { "lsp", "pattern" },
|
||||||
|
|
||||||
|
-- Files/folders that indicate a root
|
||||||
|
patterns = { ".git", "_darcs", ".hg", ".bzr", ".svn", "Makefile", "package.json", "flake.nix" },
|
||||||
|
|
||||||
|
-- Show hidden files in telescope
|
||||||
|
show_hidden = true,
|
||||||
|
|
||||||
|
-- When the project scope changes, change the directory
|
||||||
|
scope_chdir = "global",
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guess-indent.nvim",
|
||||||
|
event = { "BufReadPre", "BufNewFile" },
|
||||||
|
after = function()
|
||||||
|
require("guess-indent").setup({})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"gitsigns.nvim",
|
||||||
|
event = { "BufReadPre", "BufNewFile" },
|
||||||
|
after = function()
|
||||||
|
require("gitsigns").setup({
|
||||||
|
signs = {
|
||||||
|
add = { text = "▎" },
|
||||||
|
change = { text = "▎" },
|
||||||
|
delete = { text = "" },
|
||||||
|
topdelete = { text = "" },
|
||||||
|
changedelete = { text = "▎" },
|
||||||
|
},
|
||||||
|
on_attach = function(bufnr)
|
||||||
|
local gitsigns = require("gitsigns")
|
||||||
|
|
||||||
|
local function map(mode, l, r, opts)
|
||||||
|
opts = opts or {}
|
||||||
|
opts.buffer = bufnr
|
||||||
|
vim.keymap.set(mode, l, r, opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Navigation
|
||||||
|
map("n", "]c", function()
|
||||||
|
if vim.wo.diff then
|
||||||
|
vim.cmd.normal({ "]c", bang = true })
|
||||||
|
else
|
||||||
|
gitsigns.nav_hunk("next")
|
||||||
|
end
|
||||||
|
end, { desc = "Jump to next git [c]hange" })
|
||||||
|
|
||||||
|
map("n", "[c", function()
|
||||||
|
if vim.wo.diff then
|
||||||
|
vim.cmd.normal({ "[c", bang = true })
|
||||||
|
else
|
||||||
|
gitsigns.nav_hunk("prev")
|
||||||
|
end
|
||||||
|
end, { desc = "Jump to previous git [c]hange" })
|
||||||
|
|
||||||
|
-- Actions
|
||||||
|
-- visual mode
|
||||||
|
map("v", "<leader>hs", function()
|
||||||
|
gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") })
|
||||||
|
end, { desc = "git [s]tage hunk" })
|
||||||
|
map("v", "<leader>hr", function()
|
||||||
|
gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") })
|
||||||
|
end, { desc = "git [r]eset hunk" })
|
||||||
|
-- normal mode
|
||||||
|
map("n", "<leader>hs", gitsigns.stage_hunk, { desc = "git [s]tage hunk" })
|
||||||
|
map("n", "<leader>hr", gitsigns.reset_hunk, { desc = "git [r]eset hunk" })
|
||||||
|
map("n", "<leader>hS", gitsigns.stage_buffer, { desc = "git [S]tage buffer" })
|
||||||
|
map("n", "<leader>hu", gitsigns.stage_hunk, { desc = "git [u]ndo stage hunk" })
|
||||||
|
map("n", "<leader>hR", gitsigns.reset_buffer, { desc = "git [R]eset buffer" })
|
||||||
|
map("n", "<leader>hp", gitsigns.preview_hunk, { desc = "git [p]review hunk" })
|
||||||
|
map("n", "<leader>hb", gitsigns.blame_line, { desc = "git [b]lame line" })
|
||||||
|
map("n", "<leader>hd", gitsigns.diffthis, { desc = "git [d]iff against index" })
|
||||||
|
map("n", "<leader>hD", function()
|
||||||
|
gitsigns.diffthis("@")
|
||||||
|
end, { desc = "git [D]iff against last commit" })
|
||||||
|
-- Toggles
|
||||||
|
map("n", "<leader>tb", gitsigns.toggle_current_line_blame, { desc = "[T]oggle git show [b]lame line" })
|
||||||
|
map("n", "<leader>tD", gitsigns.preview_hunk_inline, { desc = "[T]oggle git show [D]eleted" })
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"telescope.nvim",
|
||||||
|
event = "VimEnter",
|
||||||
|
after = function()
|
||||||
|
local actions = require("telescope.actions")
|
||||||
|
|
||||||
|
require("telescope").setup({
|
||||||
|
defaults = {
|
||||||
|
path_display = { "truncate" },
|
||||||
|
layout_strategy = "horizontal",
|
||||||
|
layout_config = {
|
||||||
|
prompt_position = "top",
|
||||||
|
},
|
||||||
|
sorting_strategy = "ascending",
|
||||||
|
mappings = {
|
||||||
|
i = {
|
||||||
|
["<C-k>"] = actions.move_selection_previous, -- Move up with Ctrl-k
|
||||||
|
["<C-j>"] = actions.move_selection_next, -- Move down with Ctrl-j
|
||||||
|
["<C-q>"] = actions.send_selected_to_qflist + actions.open_qflist, -- Send to quickfix
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
extensions = {
|
||||||
|
["ui-select"] = {
|
||||||
|
require("telescope.themes").get_dropdown(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Enable Telescope extensions if they are installed
|
||||||
|
pcall(require("telescope").load_extension, "projects")
|
||||||
|
pcall(require("telescope").load_extension, "fzf")
|
||||||
|
pcall(require("telescope").load_extension, "ui-select")
|
||||||
|
|
||||||
|
-- See `:help telescope.builtin`
|
||||||
|
local builtin = require("telescope.builtin")
|
||||||
|
vim.keymap.set("n", "<leader>sh", builtin.help_tags, { desc = "[S]earch [H]elp" })
|
||||||
|
vim.keymap.set("n", "<leader>sk", builtin.keymaps, { desc = "[S]earch [K]eymaps" })
|
||||||
|
vim.keymap.set("n", "<leader>sf", builtin.find_files, { desc = "[S]earch [F]iles" })
|
||||||
|
vim.keymap.set("n", "<leader>ss", builtin.builtin, { desc = "[S]earch [S]elect Telescope" })
|
||||||
|
vim.keymap.set("n", "<leader>sw", builtin.grep_string, { desc = "[S]earch current [W]ord" })
|
||||||
|
vim.keymap.set("n", "<leader>sg", builtin.live_grep, { desc = "[S]earch by [G]rep" })
|
||||||
|
vim.keymap.set("n", "<leader>sd", builtin.diagnostics, { desc = "[S]earch [D]iagnostics" })
|
||||||
|
vim.keymap.set("n", "<leader>sr", builtin.resume, { desc = "[S]earch [R]esume" })
|
||||||
|
vim.keymap.set("n", "<leader>s.", builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' })
|
||||||
|
vim.keymap.set("n", "<leader><leader>", builtin.buffers, { desc = "[ ] Find existing buffers" })
|
||||||
|
vim.keymap.set("n", "<leader>sp", function()
|
||||||
|
require("telescope").extensions.projects.projects({})
|
||||||
|
end, { desc = "[S]earch [P]rojects" })
|
||||||
|
|
||||||
|
-- Slightly advanced example of overriding default behavior and theme
|
||||||
|
vim.keymap.set("n", "<leader>/", function()
|
||||||
|
-- You can pass additional configuration to Telescope to change the theme, layout, etc.
|
||||||
|
builtin.current_buffer_fuzzy_find(require("telescope.themes").get_dropdown({
|
||||||
|
winblend = 10,
|
||||||
|
previewer = false,
|
||||||
|
}))
|
||||||
|
end, { desc = "[/] Fuzzily search in current buffer" })
|
||||||
|
|
||||||
|
-- It's also possible to pass additional configuration options.
|
||||||
|
-- See `:help telescope.builtin.live_grep()` for information about particular keys
|
||||||
|
vim.keymap.set("n", "<leader>s/", function()
|
||||||
|
builtin.live_grep({
|
||||||
|
grep_open_files = true,
|
||||||
|
prompt_title = "Live Grep in Open Files",
|
||||||
|
})
|
||||||
|
end, { desc = "[S]earch [/] in Open Files" })
|
||||||
|
|
||||||
|
-- Shortcut for searching your Neovim configuration files
|
||||||
|
vim.keymap.set("n", "<leader>sn", function()
|
||||||
|
builtin.find_files({ cwd = vim.fn.stdpath("config") })
|
||||||
|
end, { desc = "[S]earch [N]eovim files" })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"trouble.nvim",
|
||||||
|
cmd = "Trouble",
|
||||||
|
keys = {
|
||||||
|
{ "<leader>xx", "<cmd>Trouble diagnostics toggle<cr>", desc = "Diagnostics (Trouble)" },
|
||||||
|
{ "<leader>xX", "<cmd>Trouble diagnostics toggle filter.buf=0<cr>", desc = "Buffer Diagnostics (Trouble)" },
|
||||||
|
},
|
||||||
|
after = function()
|
||||||
|
require("trouble").setup({
|
||||||
|
focus = true,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"todo-comments.nvim",
|
||||||
|
event = { "BufReadPre", "BufNewFile" },
|
||||||
|
keys = {
|
||||||
|
{ "<leader>st", "<cmd>TodoTelescope<cr>", desc = "[S]earch [T]odos" },
|
||||||
|
{ "<leader>xt", "<cmd>TodoTrouble<cr>", desc = "Todo (Trouble)" },
|
||||||
|
},
|
||||||
|
after = function()
|
||||||
|
require("todo-comments").setup({
|
||||||
|
signs = false,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mini.nvim",
|
||||||
|
after = function()
|
||||||
|
-- Better Around/Inside textobjects
|
||||||
|
require("mini.ai").setup({ n_lines = 500 })
|
||||||
|
|
||||||
|
-- Add/delete/replace surroundings (brackets, quotes, etc.)
|
||||||
|
require("mini.surround").setup()
|
||||||
|
|
||||||
|
local files = require("mini.files")
|
||||||
|
files.setup()
|
||||||
|
vim.keymap.set("n", "<leader>e", function()
|
||||||
|
if not files.close() then
|
||||||
|
files.open(vim.api.nvim_buf_get_name(0))
|
||||||
|
end
|
||||||
|
end, { desc = "File [E]xplorer" })
|
||||||
|
|
||||||
|
local icons = require("mini.icons")
|
||||||
|
icons.setup()
|
||||||
|
icons.mock_nvim_web_devicons()
|
||||||
|
|
||||||
|
local hipatterns = require("mini.hipatterns")
|
||||||
|
hipatterns.setup({
|
||||||
|
highlighters = {
|
||||||
|
-- Highlight hex color strings (#rrggbb) using that color
|
||||||
|
hex_color = hipatterns.gen_highlighter.hex_color(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
local indentscope = require("mini.indentscope")
|
||||||
|
indentscope.setup({
|
||||||
|
symbol = "│",
|
||||||
|
-- draw = { animation = indentscope.gen_animation.linear({}) },
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "lazy", "mason" },
|
||||||
|
callback = function()
|
||||||
|
vim.b.miniindentscope_disable = true
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
})
|
||||||
166
modules/neovim/lua-config/lua/plugins/lsp.lua
Normal file
166
modules/neovim/lua-config/lua/plugins/lsp.lua
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
require("lz.n").load({
|
||||||
|
{
|
||||||
|
"nvim-lspconfig",
|
||||||
|
event = { "BufReadPre", "BufNewFile" },
|
||||||
|
after = function()
|
||||||
|
vim.api.nvim_create_autocmd("LspAttach", {
|
||||||
|
group = vim.api.nvim_create_augroup("kickstart-lsp-attach", { clear = true }),
|
||||||
|
callback = function(args)
|
||||||
|
-- Get the client and buffer from the event arguments [cite: 119]
|
||||||
|
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||||
|
local bufnr = args.buf
|
||||||
|
|
||||||
|
local map = function(keys, func, desc, mode)
|
||||||
|
mode = mode or "n"
|
||||||
|
vim.keymap.set(mode, keys, func, { buffer = bufnr, desc = "LSP: " .. desc })
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Mappings (Standard LSP functions from lsp-defaults) [cite: 20-23]
|
||||||
|
map("grn", vim.lsp.buf.rename, "[R]e[n]ame")
|
||||||
|
map("gra", vim.lsp.buf.code_action, "[G]oto Code [A]ction", { "n", "x" })
|
||||||
|
map("grD", vim.lsp.buf.declaration, "[G]oto [D]eclaration")
|
||||||
|
|
||||||
|
-- Telescope Mappings
|
||||||
|
map("grr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences")
|
||||||
|
map("gri", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation")
|
||||||
|
map("grd", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition")
|
||||||
|
map("gO", require("telescope.builtin").lsp_document_symbols, "Open Document Symbols")
|
||||||
|
map("gW", require("telescope.builtin").lsp_dynamic_workspace_symbols, "Open Workspace Symbols")
|
||||||
|
map("grt", require("telescope.builtin").lsp_type_definitions, "[G]oto [T]ype Definition")
|
||||||
|
|
||||||
|
-- Highlight references (Document Highlight)
|
||||||
|
if client and client:supports_method("textDocument/documentHighlight", bufnr) then
|
||||||
|
local highlight_augroup = vim.api.nvim_create_augroup("kickstart-lsp-highlight", { clear = false })
|
||||||
|
vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, {
|
||||||
|
buffer = bufnr,
|
||||||
|
group = highlight_augroup,
|
||||||
|
callback = vim.lsp.buf.document_highlight,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, {
|
||||||
|
buffer = bufnr,
|
||||||
|
group = highlight_augroup,
|
||||||
|
callback = vim.lsp.buf.clear_references,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("LspDetach", {
|
||||||
|
group = vim.api.nvim_create_augroup("kickstart-lsp-detach", { clear = true }),
|
||||||
|
callback = function(event)
|
||||||
|
vim.lsp.buf.clear_references()
|
||||||
|
vim.api.nvim_clear_autocmds({ group = "kickstart-lsp-highlight", buffer = event.buf })
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Inlay Hints
|
||||||
|
if client and client:supports_method("textDocument/inlayHint", bufnr) then
|
||||||
|
vim.lsp.inlay_hint.enable(true, { bufnr = bufnr })
|
||||||
|
map("<leader>th", function()
|
||||||
|
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = bufnr }))
|
||||||
|
end, "[T]oggle Inlay [H]ints")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- 1. Setup Diagnostics (Visuals)
|
||||||
|
vim.diagnostic.config({
|
||||||
|
severity_sort = true,
|
||||||
|
-- underline = { severity = vim.diagnostic.severity.ERROR },
|
||||||
|
signs = {
|
||||||
|
text = {
|
||||||
|
[vim.diagnostic.severity.ERROR] = " ",
|
||||||
|
[vim.diagnostic.severity.WARN] = " ",
|
||||||
|
[vim.diagnostic.severity.INFO] = " ",
|
||||||
|
[vim.diagnostic.severity.HINT] = " ",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
virtual_text = {
|
||||||
|
source = "if_many",
|
||||||
|
spacing = 4,
|
||||||
|
prefix = "●",
|
||||||
|
format = function(diagnostic)
|
||||||
|
local diagnostic_message = {
|
||||||
|
[vim.diagnostic.severity.ERROR] = diagnostic.message,
|
||||||
|
[vim.diagnostic.severity.WARN] = diagnostic.message,
|
||||||
|
[vim.diagnostic.severity.INFO] = diagnostic.message,
|
||||||
|
[vim.diagnostic.severity.HINT] = diagnostic.message,
|
||||||
|
}
|
||||||
|
return diagnostic_message[diagnostic.severity]
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.lsp.config("lua_ls", {
|
||||||
|
settings = {
|
||||||
|
Lua = {
|
||||||
|
runtime = { version = "LuaJIT" },
|
||||||
|
signatureHelp = { enabled = true },
|
||||||
|
diagnostics = { globals = { "nixCats", "vim" } },
|
||||||
|
telemetry = { enabled = false },
|
||||||
|
completion = { callSnippet = "Replace" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
vim.lsp.enable("lua_ls")
|
||||||
|
|
||||||
|
local settings = require("nix-info").settings
|
||||||
|
|
||||||
|
-- Nix
|
||||||
|
vim.lsp.config("nixd", {
|
||||||
|
settings = {
|
||||||
|
nixd = {
|
||||||
|
nixpkgs = { expr = settings.nixdExtras.nixpkgs },
|
||||||
|
options = {
|
||||||
|
nixos = { expr = settings.nixdExtras.nixos_options },
|
||||||
|
["home-manager"] = { expr = settings.nixdExtras.home_manager_options },
|
||||||
|
},
|
||||||
|
formatting = { command = { "nixfmt" } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
vim.lsp.enable("nixd")
|
||||||
|
|
||||||
|
-- Dafny
|
||||||
|
vim.lsp.enable("dafny")
|
||||||
|
|
||||||
|
-- TypeScript/JS
|
||||||
|
vim.lsp.enable("ts_ls")
|
||||||
|
|
||||||
|
-- Rust
|
||||||
|
vim.lsp.enable("rust_analyzer")
|
||||||
|
|
||||||
|
-- Python
|
||||||
|
-- vim.lsp.config("basedpyright", {
|
||||||
|
-- settings = {
|
||||||
|
-- basedpyright = {
|
||||||
|
-- analysis = {
|
||||||
|
-- autoSearchPaths = true,
|
||||||
|
-- useLibraryCodeForTypes = true,
|
||||||
|
-- diagnosticMode = "openFilesOnly",
|
||||||
|
-- typeCheckingMode = "recommended",
|
||||||
|
-- inlayHints = {
|
||||||
|
-- variableTypes = true,
|
||||||
|
-- callArgumentNames = true,
|
||||||
|
-- functionReturnTypes = true,
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- })
|
||||||
|
-- vim.lsp.enable("basedpyright")
|
||||||
|
vim.lsp.enable("ty")
|
||||||
|
vim.lsp.enable("ruff")
|
||||||
|
|
||||||
|
vim.lsp.enable("astro")
|
||||||
|
|
||||||
|
vim.lsp.config("tinymist", {
|
||||||
|
settings = {
|
||||||
|
tinymist = {
|
||||||
|
formatterMode = "typstyle",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
vim.lsp.enable("tinymist")
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
})
|
||||||
202
modules/neovim/lua-config/lua/plugins/ui.lua
Normal file
202
modules/neovim/lua-config/lua/plugins/ui.lua
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
require("lz.n").load({
|
||||||
|
-- {
|
||||||
|
-- "catppuccin-nvim",
|
||||||
|
-- event = "VimEnter",
|
||||||
|
-- after = function()
|
||||||
|
-- require("catppuccin").setup({
|
||||||
|
-- flavour = "mocha",
|
||||||
|
-- term_colors = true,
|
||||||
|
-- dim_inactive = {
|
||||||
|
-- enabled = true,
|
||||||
|
-- shade = "dark",
|
||||||
|
-- percentage = 0.15,
|
||||||
|
-- },
|
||||||
|
-- integrations = {
|
||||||
|
-- gitsigns = true,
|
||||||
|
-- telescope = true,
|
||||||
|
-- treesitter = true,
|
||||||
|
-- treesitter_context = true,
|
||||||
|
-- markdown = true,
|
||||||
|
-- which_key = true,
|
||||||
|
-- blink_cmp = {
|
||||||
|
-- style = "bordered",
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
--
|
||||||
|
-- native_lsp = {
|
||||||
|
-- enabled = true,
|
||||||
|
-- virtual_text = {
|
||||||
|
-- errors = { "italic" },
|
||||||
|
-- hints = { "italic" },
|
||||||
|
-- warnings = { "italic" },
|
||||||
|
-- information = { "italic" },
|
||||||
|
-- },
|
||||||
|
-- underlines = {
|
||||||
|
-- errors = { "underline" },
|
||||||
|
-- hints = { "underline" },
|
||||||
|
-- warnings = { "underline" },
|
||||||
|
-- information = { "underline" },
|
||||||
|
-- },
|
||||||
|
-- inlay_hints = {
|
||||||
|
-- background = true,
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- })
|
||||||
|
--
|
||||||
|
-- vim.cmd.colorscheme("catppuccin")
|
||||||
|
-- end,
|
||||||
|
-- },
|
||||||
|
{
|
||||||
|
"theme-loader",
|
||||||
|
event = "VimEnter",
|
||||||
|
load = function()
|
||||||
|
local settings = require("nix-info").settings
|
||||||
|
local theme_code = settings.themeSetup
|
||||||
|
|
||||||
|
local func, err = loadstring(theme_code)
|
||||||
|
if func then
|
||||||
|
func()
|
||||||
|
else
|
||||||
|
print("Error loading theme code: " .. err)
|
||||||
|
end
|
||||||
|
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"colorful-menu.nvim",
|
||||||
|
after = function()
|
||||||
|
require("colorful-menu").setup({})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indent-blankline.nvim",
|
||||||
|
event = "User FileOpened",
|
||||||
|
after = function()
|
||||||
|
require("ibl").setup({
|
||||||
|
indent = { char = "|" },
|
||||||
|
scope = {
|
||||||
|
enabled = false,
|
||||||
|
show_start = false,
|
||||||
|
show_end = false,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"render-markdown.nvim",
|
||||||
|
before = function()
|
||||||
|
require("lz.n").trigger_load({ "nvim-treesitter", "mini.nvim" })
|
||||||
|
end,
|
||||||
|
after = function()
|
||||||
|
require("render-markdown").setup({})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"which-key.nvim",
|
||||||
|
event = "VimEnter",
|
||||||
|
before = function()
|
||||||
|
require("lz.n").trigger_load("nvim-web-devicons")
|
||||||
|
end,
|
||||||
|
after = function()
|
||||||
|
require("which-key").setup({
|
||||||
|
preset = "modern",
|
||||||
|
delay = 200,
|
||||||
|
icons = {
|
||||||
|
-- set icon mappings to true if you have a Nerd Font
|
||||||
|
mappings = true,
|
||||||
|
-- If you are using a Nerd Font: set icons.keys to an empty table which will use the
|
||||||
|
-- default which-key.nvim defined Nerd Font icons, otherwise define a string table
|
||||||
|
keys = {},
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Document existing key chains
|
||||||
|
spec = {
|
||||||
|
{ "<leader>s", group = "[S]earch" },
|
||||||
|
{ "<leader>t", group = "[T]oggle" },
|
||||||
|
{ "<leader>h", group = "Git [H]unk", mode = { "n", "v" } },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lualine.nvim",
|
||||||
|
event = "VimEnter",
|
||||||
|
after = function()
|
||||||
|
require("lualine").setup({
|
||||||
|
options = {
|
||||||
|
icons_enabled = true,
|
||||||
|
globalstatus = true,
|
||||||
|
component_separators = "",
|
||||||
|
section_separators = "",
|
||||||
|
},
|
||||||
|
sections = {
|
||||||
|
lualine_a = { "mode" },
|
||||||
|
lualine_b = { "branch", "diagnostics" },
|
||||||
|
lualine_c = { "filename" },
|
||||||
|
|
||||||
|
lualine_x = { "lsp_status" },
|
||||||
|
lualine_y = { "progress" },
|
||||||
|
lualine_z = { "location" },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferline.nvim",
|
||||||
|
enabled = false,
|
||||||
|
event = "VimEnter",
|
||||||
|
after = function()
|
||||||
|
require("bufferline").setup({
|
||||||
|
options = {
|
||||||
|
mode = "buffers",
|
||||||
|
numbers = "none",
|
||||||
|
|
||||||
|
separator_style = "thick",
|
||||||
|
|
||||||
|
-- Integrations
|
||||||
|
diagnostics = "nvim_lsp",
|
||||||
|
diagnostics_indicator = function(count, level, diagnostics_dict, context)
|
||||||
|
local icon = level:match("error") and " " or " "
|
||||||
|
return " " .. icon .. count
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- Visuals
|
||||||
|
show_buffer_close_icons = false,
|
||||||
|
show_close_icon = false,
|
||||||
|
color_icons = true,
|
||||||
|
show_tab_indicators = true,
|
||||||
|
},
|
||||||
|
|
||||||
|
highlights = {
|
||||||
|
fill = {
|
||||||
|
bg = "NONE", -- Makes the empty space transparent/blended
|
||||||
|
},
|
||||||
|
background = {
|
||||||
|
bg = "NONE", -- Makes inactive buffers transparent/blended
|
||||||
|
},
|
||||||
|
-- Optional: Fix separators if they look "cut off"
|
||||||
|
separator = {
|
||||||
|
fg = { attribute = "bg", highlight = "Normal" },
|
||||||
|
bg = "NONE",
|
||||||
|
},
|
||||||
|
separator_visible = {
|
||||||
|
fg = { attribute = "bg", highlight = "Normal" },
|
||||||
|
bg = "NONE",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"zen-mode.nvim",
|
||||||
|
after = function()
|
||||||
|
require("zen-mode").setup({
|
||||||
|
window = {
|
||||||
|
options = {
|
||||||
|
linebreak = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
})
|
||||||
309
modules/niri.nix
Normal file
309
modules/niri.nix
Normal file
@@ -0,0 +1,309 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
flake-file.inputs.niri.url = "github:sodiboo/niri-flake";
|
||||||
|
|
||||||
|
lux.niri = {
|
||||||
|
nixos =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [ inputs.niri.nixosModules.niri ];
|
||||||
|
nixpkgs.overlays = [ inputs.niri.overlays.niri ];
|
||||||
|
|
||||||
|
programs.niri.enable = true;
|
||||||
|
programs.niri.package = pkgs.niri-unstable;
|
||||||
|
};
|
||||||
|
|
||||||
|
homeManager =
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
# Needed for file picker
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
playerctl
|
||||||
|
nautilus
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.niri = {
|
||||||
|
settings = {
|
||||||
|
prefer-no-csd = true;
|
||||||
|
hotkey-overlay.skip-at-startup = true;
|
||||||
|
screenshot-path = "${config.xdg.userDirs.pictures}/screenshots/%Y-%m-%dT%H:%M:%S.png";
|
||||||
|
|
||||||
|
cursor = with config.home.pointerCursor; {
|
||||||
|
size = size;
|
||||||
|
theme = name;
|
||||||
|
|
||||||
|
hide-after-inactive-ms = 3000;
|
||||||
|
hide-when-typing = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
layout = {
|
||||||
|
always-center-single-column = true;
|
||||||
|
gaps = 16;
|
||||||
|
focus-ring.width = 3;
|
||||||
|
};
|
||||||
|
|
||||||
|
window-rules = [
|
||||||
|
{
|
||||||
|
geometry-corner-radius =
|
||||||
|
let
|
||||||
|
radius = 15.0;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
bottom-left = radius;
|
||||||
|
bottom-right = radius;
|
||||||
|
top-left = radius;
|
||||||
|
top-right = radius;
|
||||||
|
};
|
||||||
|
clip-to-geometry = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
debug = {
|
||||||
|
honor-xdg-activation-with-invalid-serial = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
input = {
|
||||||
|
focus-follows-mouse.enable = true;
|
||||||
|
keyboard = {
|
||||||
|
repeat-delay = 300;
|
||||||
|
repeat-rate = 50;
|
||||||
|
xkb.options = "caps:escape";
|
||||||
|
};
|
||||||
|
mouse.accel-speed = 0.4;
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs."LG Electronics LG ULTRAGEAR 103NTYT8R290" = {
|
||||||
|
focus-at-startup = true;
|
||||||
|
position.x = 0;
|
||||||
|
position.y = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs."LG Electronics LG ULTRAGEAR 103NTJJ8R332" = {
|
||||||
|
position.x = 2560;
|
||||||
|
position.y = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
binds = {
|
||||||
|
"Mod+Space".action.spawn-sh = "noctalia-shell ipc call launcher toggle";
|
||||||
|
|
||||||
|
# --- Helpful Overlays & Launchers ---
|
||||||
|
"Mod+Shift+Slash".action.show-hotkey-overlay = [ ];
|
||||||
|
|
||||||
|
"Mod+Return" = {
|
||||||
|
action.spawn = "kitty";
|
||||||
|
hotkey-overlay.title = "Open a Terminal";
|
||||||
|
};
|
||||||
|
|
||||||
|
"Mod+B" = {
|
||||||
|
action.spawn = "brave";
|
||||||
|
hotkey-overlay.title = "Open a Browser";
|
||||||
|
};
|
||||||
|
|
||||||
|
"Mod+D" = {
|
||||||
|
action.spawn = "fuzzel";
|
||||||
|
hotkey-overlay.title = "Run an Application: fuzzel";
|
||||||
|
};
|
||||||
|
"Mod+Alt+S" = {
|
||||||
|
action.spawn-sh = "pkill orca || exec orca";
|
||||||
|
allow-when-locked = true;
|
||||||
|
hotkey-overlay.hidden = true; # Equivalent to hotkey-overlay-title=null
|
||||||
|
};
|
||||||
|
|
||||||
|
# --- Audio & Media Controls ---
|
||||||
|
"XF86AudioPlay" = {
|
||||||
|
action.spawn-sh = "playerctl play-pause";
|
||||||
|
allow-when-locked = true;
|
||||||
|
};
|
||||||
|
"XF86AudioStop" = {
|
||||||
|
action.spawn-sh = "playerctl stop";
|
||||||
|
allow-when-locked = true;
|
||||||
|
};
|
||||||
|
"XF86AudioPrev" = {
|
||||||
|
action.spawn-sh = "playerctl previous";
|
||||||
|
allow-when-locked = true;
|
||||||
|
};
|
||||||
|
"XF86AudioNext" = {
|
||||||
|
action.spawn-sh = "playerctl next";
|
||||||
|
allow-when-locked = true;
|
||||||
|
};
|
||||||
|
"XF86AudioRaiseVolume" = {
|
||||||
|
action.spawn-sh = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+";
|
||||||
|
allow-when-locked = true;
|
||||||
|
};
|
||||||
|
"XF86AudioLowerVolume" = {
|
||||||
|
action.spawn-sh = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-";
|
||||||
|
allow-when-locked = true;
|
||||||
|
};
|
||||||
|
"XF86AudioMute" = {
|
||||||
|
action.spawn-sh = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
|
||||||
|
allow-when-locked = true;
|
||||||
|
};
|
||||||
|
"XF86AudioMicMute" = {
|
||||||
|
action.spawn-sh = "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
|
||||||
|
allow-when-locked = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# --- Overview & Window Management ---
|
||||||
|
"Mod+O" = {
|
||||||
|
action.toggle-overview = [ ];
|
||||||
|
repeat = false;
|
||||||
|
};
|
||||||
|
"Mod+Q" = {
|
||||||
|
action.close-window = [ ];
|
||||||
|
repeat = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Focus Movement
|
||||||
|
"Mod+H".action.focus-column-left = [ ];
|
||||||
|
"Mod+J".action.focus-window-down = [ ];
|
||||||
|
"Mod+K".action.focus-window-up = [ ];
|
||||||
|
"Mod+L".action.focus-column-right = [ ];
|
||||||
|
|
||||||
|
# Window Movement
|
||||||
|
"Mod+Ctrl+Left".action.move-column-left = [ ];
|
||||||
|
"Mod+Ctrl+Down".action.move-window-down = [ ];
|
||||||
|
"Mod+Ctrl+Up".action.move-window-up = [ ];
|
||||||
|
"Mod+Ctrl+Right".action.move-column-right = [ ];
|
||||||
|
"Mod+Ctrl+H".action.move-column-left = [ ];
|
||||||
|
"Mod+Ctrl+J".action.move-window-down = [ ];
|
||||||
|
"Mod+Ctrl+K".action.move-window-up = [ ];
|
||||||
|
"Mod+Ctrl+L".action.move-column-right = [ ];
|
||||||
|
|
||||||
|
# Column Focus & Movement
|
||||||
|
"Mod+Home".action.focus-column-first = [ ];
|
||||||
|
"Mod+End".action.focus-column-last = [ ];
|
||||||
|
"Mod+Ctrl+Home".action.move-column-to-first = [ ];
|
||||||
|
"Mod+Ctrl+End".action.move-column-to-last = [ ];
|
||||||
|
|
||||||
|
# Monitor Focus
|
||||||
|
"Mod+Shift+Left".action.focus-monitor-left = [ ];
|
||||||
|
"Mod+Shift+Down".action.focus-monitor-down = [ ];
|
||||||
|
"Mod+Shift+Up".action.focus-monitor-up = [ ];
|
||||||
|
"Mod+Shift+Right".action.focus-monitor-right = [ ];
|
||||||
|
"Mod+Shift+H".action.focus-monitor-left = [ ];
|
||||||
|
"Mod+Shift+J".action.focus-monitor-down = [ ];
|
||||||
|
"Mod+Shift+K".action.focus-monitor-up = [ ];
|
||||||
|
"Mod+Shift+L".action.focus-monitor-right = [ ];
|
||||||
|
|
||||||
|
# Monitor Movement
|
||||||
|
"Mod+Shift+Ctrl+Left".action.move-column-to-monitor-left = [ ];
|
||||||
|
"Mod+Shift+Ctrl+Down".action.move-column-to-monitor-down = [ ];
|
||||||
|
"Mod+Shift+Ctrl+Up".action.move-column-to-monitor-up = [ ];
|
||||||
|
"Mod+Shift+Ctrl+Right".action.move-column-to-monitor-right = [ ];
|
||||||
|
"Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = [ ];
|
||||||
|
"Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = [ ];
|
||||||
|
"Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = [ ];
|
||||||
|
"Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = [ ];
|
||||||
|
|
||||||
|
# Workspace Focus
|
||||||
|
"Mod+Page_Down".action.focus-workspace-down = [ ];
|
||||||
|
"Mod+Page_Up".action.focus-workspace-up = [ ];
|
||||||
|
"Mod+U".action.focus-workspace-down = [ ];
|
||||||
|
"Mod+I".action.focus-workspace-up = [ ];
|
||||||
|
|
||||||
|
# Workspace Movement (Column)
|
||||||
|
"Mod+Ctrl+Page_Down".action.move-column-to-workspace-down = [ ];
|
||||||
|
"Mod+Ctrl+Page_Up".action.move-column-to-workspace-up = [ ];
|
||||||
|
"Mod+Ctrl+U".action.move-column-to-workspace-down = [ ];
|
||||||
|
"Mod+Ctrl+I".action.move-column-to-workspace-up = [ ];
|
||||||
|
|
||||||
|
# Workspace Movement (Entire Workspace)
|
||||||
|
"Mod+Shift+Page_Down".action.move-workspace-down = [ ];
|
||||||
|
"Mod+Shift+Page_Up".action.move-workspace-up = [ ];
|
||||||
|
"Mod+Shift+U".action.move-workspace-down = [ ];
|
||||||
|
"Mod+Shift+I".action.move-workspace-up = [ ];
|
||||||
|
|
||||||
|
# --- Mouse Wheel Scrolling ---
|
||||||
|
"Mod+WheelScrollDown" = {
|
||||||
|
action.focus-workspace-down = [ ];
|
||||||
|
cooldown-ms = 150;
|
||||||
|
};
|
||||||
|
"Mod+WheelScrollUp" = {
|
||||||
|
action.focus-workspace-up = [ ];
|
||||||
|
cooldown-ms = 150;
|
||||||
|
};
|
||||||
|
"Mod+Ctrl+WheelScrollDown" = {
|
||||||
|
action.move-column-to-workspace-down = [ ];
|
||||||
|
cooldown-ms = 150;
|
||||||
|
};
|
||||||
|
"Mod+Ctrl+WheelScrollUp" = {
|
||||||
|
action.move-column-to-workspace-up = [ ];
|
||||||
|
cooldown-ms = 150;
|
||||||
|
};
|
||||||
|
|
||||||
|
"Mod+WheelScrollRight".action.focus-column-right = [ ];
|
||||||
|
"Mod+WheelScrollLeft".action.focus-column-left = [ ];
|
||||||
|
"Mod+Ctrl+WheelScrollRight".action.move-column-right = [ ];
|
||||||
|
"Mod+Ctrl+WheelScrollLeft".action.move-column-left = [ ];
|
||||||
|
|
||||||
|
"Mod+Shift+WheelScrollDown".action.focus-column-right = [ ];
|
||||||
|
"Mod+Shift+WheelScrollUp".action.focus-column-left = [ ];
|
||||||
|
"Mod+Ctrl+Shift+WheelScrollDown".action.move-column-right = [ ];
|
||||||
|
"Mod+Ctrl+Shift+WheelScrollUp".action.move-column-left = [ ];
|
||||||
|
|
||||||
|
# --- Workspace Indices ---
|
||||||
|
"Mod+1".action.focus-workspace = 1;
|
||||||
|
"Mod+2".action.focus-workspace = 2;
|
||||||
|
"Mod+3".action.focus-workspace = 3;
|
||||||
|
"Mod+4".action.focus-workspace = 4;
|
||||||
|
"Mod+5".action.focus-workspace = 5;
|
||||||
|
"Mod+6".action.focus-workspace = 6;
|
||||||
|
"Mod+7".action.focus-workspace = 7;
|
||||||
|
"Mod+8".action.focus-workspace = 8;
|
||||||
|
"Mod+9".action.focus-workspace = 9;
|
||||||
|
|
||||||
|
"Mod+Ctrl+1".action.move-column-to-workspace = 1;
|
||||||
|
"Mod+Ctrl+2".action.move-column-to-workspace = 2;
|
||||||
|
"Mod+Ctrl+3".action.move-column-to-workspace = 3;
|
||||||
|
"Mod+Ctrl+4".action.move-column-to-workspace = 4;
|
||||||
|
"Mod+Ctrl+5".action.move-column-to-workspace = 5;
|
||||||
|
"Mod+Ctrl+6".action.move-column-to-workspace = 6;
|
||||||
|
"Mod+Ctrl+7".action.move-column-to-workspace = 7;
|
||||||
|
"Mod+Ctrl+8".action.move-column-to-workspace = 8;
|
||||||
|
"Mod+Ctrl+9".action.move-column-to-workspace = 9;
|
||||||
|
|
||||||
|
# --- Column/Window Reshaping & Organization ---
|
||||||
|
"Mod+BracketLeft".action.consume-or-expel-window-left = [ ];
|
||||||
|
"Mod+BracketRight".action.consume-or-expel-window-right = [ ];
|
||||||
|
"Mod+Comma".action.consume-window-into-column = [ ];
|
||||||
|
"Mod+Period".action.expel-window-from-column = [ ];
|
||||||
|
|
||||||
|
"Mod+R".action.switch-preset-column-width = [ ];
|
||||||
|
"Mod+Shift+R".action.switch-preset-window-height = [ ];
|
||||||
|
"Mod+Ctrl+R".action.reset-window-height = [ ];
|
||||||
|
"Mod+F".action.maximize-column = [ ];
|
||||||
|
"Mod+Shift+F".action.fullscreen-window = [ ];
|
||||||
|
"Mod+M".action.maximize-window-to-edges = [ ];
|
||||||
|
"Mod+Ctrl+F".action.expand-column-to-available-width = [ ];
|
||||||
|
"Mod+C".action.center-column = [ ];
|
||||||
|
"Mod+Ctrl+C".action.center-visible-columns = [ ];
|
||||||
|
|
||||||
|
"Mod+Minus".action.set-column-width = "-10%";
|
||||||
|
"Mod+Equal".action.set-column-width = "+10%";
|
||||||
|
"Mod+Shift+Minus".action.set-window-height = "-10%";
|
||||||
|
"Mod+Shift+Equal".action.set-window-height = "+10%";
|
||||||
|
|
||||||
|
"Mod+V".action.toggle-window-floating = [ ];
|
||||||
|
"Mod+Shift+V".action.switch-focus-between-floating-and-tiling = [ ];
|
||||||
|
"Mod+W".action.toggle-column-tabbed-display = [ ];
|
||||||
|
|
||||||
|
# --- Screenshots ---
|
||||||
|
"Print".action.screenshot = [ ];
|
||||||
|
"Ctrl+Print".action.screenshot-screen = [ ];
|
||||||
|
"Alt+Print".action.screenshot-window = [ ];
|
||||||
|
|
||||||
|
# --- System & Session ---
|
||||||
|
"Mod+Escape" = {
|
||||||
|
action.toggle-keyboard-shortcuts-inhibit = [ ];
|
||||||
|
allow-inhibiting = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
"Mod+Shift+E".action.quit = [ ];
|
||||||
|
"Ctrl+Alt+Delete".action.quit = [ ];
|
||||||
|
"Mod+Shift+P".action.power-off-monitors = [ ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
26
modules/nix.nix
Normal file
26
modules/nix.nix
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
den.default = {
|
||||||
|
nixos = {
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
nix = {
|
||||||
|
gc.automatic = true;
|
||||||
|
optimise.automatic = true;
|
||||||
|
registry.nixpkgs.flake = inputs.nixpkgs;
|
||||||
|
channel.enable = false;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
trusted-users = [ "@wheel" ];
|
||||||
|
use-xdg-base-directories = true;
|
||||||
|
auto-optimise-store = true;
|
||||||
|
|
||||||
|
experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
566
modules/noctalia.nix
Normal file
566
modules/noctalia.nix
Normal file
@@ -0,0 +1,566 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
flake-file.inputs.noctalia.url = "github:noctalia-dev/noctalia-shell";
|
||||||
|
|
||||||
|
lux.noctalia = {
|
||||||
|
homeManager =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [ inputs.noctalia.homeModules.default ];
|
||||||
|
|
||||||
|
programs.noctalia-shell = {
|
||||||
|
enable = true;
|
||||||
|
package = inputs.noctalia.packages.${pkgs.stdenv.hostPlatform.system}.default.override {
|
||||||
|
calendarSupport = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.enable = true;
|
||||||
|
settings = {
|
||||||
|
settingsVersion = 53;
|
||||||
|
bar = {
|
||||||
|
barType = "simple";
|
||||||
|
position = "top";
|
||||||
|
monitors = [ ];
|
||||||
|
density = "default";
|
||||||
|
showOutline = false;
|
||||||
|
showCapsule = true;
|
||||||
|
capsuleOpacity = 1;
|
||||||
|
capsuleColorKey = "none";
|
||||||
|
backgroundOpacity = 0.93;
|
||||||
|
useSeparateOpacity = false;
|
||||||
|
floating = false;
|
||||||
|
marginVertical = 4;
|
||||||
|
marginHorizontal = 4;
|
||||||
|
frameThickness = 8;
|
||||||
|
frameRadius = 12;
|
||||||
|
outerCorners = true;
|
||||||
|
hideOnOverview = false;
|
||||||
|
displayMode = "always_visible";
|
||||||
|
autoHideDelay = 500;
|
||||||
|
autoShowDelay = 150;
|
||||||
|
widgets = {
|
||||||
|
left = [
|
||||||
|
{
|
||||||
|
icon = "rocket";
|
||||||
|
iconColor = "none";
|
||||||
|
id = "Launcher";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
clockColor = "none";
|
||||||
|
customFont = "";
|
||||||
|
formatHorizontal = "HH:mm ddd, MMM dd";
|
||||||
|
formatVertical = "HH mm - dd MM";
|
||||||
|
id = "Clock";
|
||||||
|
tooltipFormat = "HH:mm ddd, MMM dd";
|
||||||
|
useCustomFont = false;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
characterCount = 2;
|
||||||
|
colorizeIcons = false;
|
||||||
|
emptyColor = "secondary";
|
||||||
|
enableScrollWheel = true;
|
||||||
|
focusedColor = "primary";
|
||||||
|
followFocusedScreen = false;
|
||||||
|
groupedBorderOpacity = 1;
|
||||||
|
hideUnoccupied = false;
|
||||||
|
iconScale = 0.8;
|
||||||
|
id = "Workspace";
|
||||||
|
labelMode = "index";
|
||||||
|
occupiedColor = "secondary";
|
||||||
|
pillSize = 0.6;
|
||||||
|
reverseScroll = false;
|
||||||
|
showApplications = false;
|
||||||
|
showBadge = true;
|
||||||
|
showLabelsOnlyWhenOccupied = true;
|
||||||
|
unfocusedIconsOpacity = 1;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
center = [
|
||||||
|
{
|
||||||
|
colorizeIcons = false;
|
||||||
|
hideMode = "hidden";
|
||||||
|
id = "ActiveWindow";
|
||||||
|
maxWidth = 400;
|
||||||
|
scrollingMode = "hover";
|
||||||
|
showIcon = true;
|
||||||
|
textColor = "none";
|
||||||
|
useFixedWidth = false;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
right = [
|
||||||
|
{
|
||||||
|
compactMode = false;
|
||||||
|
compactShowAlbumArt = true;
|
||||||
|
compactShowVisualizer = false;
|
||||||
|
hideMode = "hidden";
|
||||||
|
hideWhenIdle = false;
|
||||||
|
id = "MediaMini";
|
||||||
|
maxWidth = 145;
|
||||||
|
panelShowAlbumArt = true;
|
||||||
|
panelShowVisualizer = true;
|
||||||
|
scrollingMode = "hover";
|
||||||
|
showAlbumArt = true;
|
||||||
|
showArtistFirst = true;
|
||||||
|
showProgressRing = true;
|
||||||
|
showVisualizer = false;
|
||||||
|
textColor = "none";
|
||||||
|
useFixedWidth = false;
|
||||||
|
visualizerType = "linear";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
blacklist = [ ];
|
||||||
|
chevronColor = "none";
|
||||||
|
colorizeIcons = false;
|
||||||
|
drawerEnabled = true;
|
||||||
|
hidePassive = false;
|
||||||
|
id = "Tray";
|
||||||
|
pinned = [ ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
hideWhenZero = false;
|
||||||
|
hideWhenZeroUnread = false;
|
||||||
|
iconColor = "none";
|
||||||
|
id = "NotificationHistory";
|
||||||
|
showUnreadBadge = true;
|
||||||
|
unreadBadgeColor = "primary";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
displayMode = "onhover";
|
||||||
|
iconColor = "none";
|
||||||
|
id = "Volume";
|
||||||
|
middleClickCommand = "pwvucontrol || pavucontrol";
|
||||||
|
textColor = "none";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
colorizeDistroLogo = false;
|
||||||
|
colorizeSystemIcon = "none";
|
||||||
|
customIconPath = "";
|
||||||
|
enableColorization = false;
|
||||||
|
icon = "noctalia";
|
||||||
|
id = "ControlCenter";
|
||||||
|
useDistroLogo = false;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
screenOverrides = [ ];
|
||||||
|
};
|
||||||
|
general = {
|
||||||
|
avatarImage = "/home/kiri/.face";
|
||||||
|
dimmerOpacity = 0;
|
||||||
|
showScreenCorners = false;
|
||||||
|
forceBlackScreenCorners = false;
|
||||||
|
scaleRatio = 1;
|
||||||
|
radiusRatio = 1;
|
||||||
|
iRadiusRatio = 1;
|
||||||
|
boxRadiusRatio = 1;
|
||||||
|
screenRadiusRatio = 1;
|
||||||
|
animationSpeed = 1;
|
||||||
|
animationDisabled = false;
|
||||||
|
compactLockScreen = false;
|
||||||
|
lockScreenAnimations = false;
|
||||||
|
lockOnSuspend = true;
|
||||||
|
showSessionButtonsOnLockScreen = true;
|
||||||
|
showHibernateOnLockScreen = false;
|
||||||
|
enableShadows = true;
|
||||||
|
shadowDirection = "bottom_right";
|
||||||
|
shadowOffsetX = 2;
|
||||||
|
shadowOffsetY = 3;
|
||||||
|
language = "";
|
||||||
|
allowPanelsOnScreenWithoutBar = true;
|
||||||
|
showChangelogOnStartup = true;
|
||||||
|
telemetryEnabled = false;
|
||||||
|
enableLockScreenCountdown = true;
|
||||||
|
lockScreenCountdownDuration = 10000;
|
||||||
|
autoStartAuth = false;
|
||||||
|
allowPasswordWithFprintd = false;
|
||||||
|
clockStyle = "custom";
|
||||||
|
clockFormat = "hh\\nmm";
|
||||||
|
lockScreenMonitors = [ ];
|
||||||
|
lockScreenBlur = 0;
|
||||||
|
lockScreenTint = 0;
|
||||||
|
keybinds = {
|
||||||
|
keyUp = [
|
||||||
|
"Up"
|
||||||
|
];
|
||||||
|
keyDown = [
|
||||||
|
"Down"
|
||||||
|
];
|
||||||
|
keyLeft = [
|
||||||
|
"Left"
|
||||||
|
];
|
||||||
|
keyRight = [
|
||||||
|
"Right"
|
||||||
|
];
|
||||||
|
keyEnter = [
|
||||||
|
"Return"
|
||||||
|
];
|
||||||
|
keyEscape = [
|
||||||
|
"Esc"
|
||||||
|
];
|
||||||
|
keyRemove = [
|
||||||
|
"Del"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
ui = {
|
||||||
|
fontDefault = "Comfortaa Medium";
|
||||||
|
fontFixed = "FiraCode Nerd Font";
|
||||||
|
fontDefaultScale = 1;
|
||||||
|
fontFixedScale = 1;
|
||||||
|
tooltipsEnabled = true;
|
||||||
|
panelBackgroundOpacity = 1;
|
||||||
|
panelsAttachedToBar = true;
|
||||||
|
settingsPanelMode = "attached";
|
||||||
|
wifiDetailsViewMode = "grid";
|
||||||
|
bluetoothDetailsViewMode = "grid";
|
||||||
|
networkPanelView = "wifi";
|
||||||
|
bluetoothHideUnnamedDevices = false;
|
||||||
|
boxBorderEnabled = false;
|
||||||
|
};
|
||||||
|
location = {
|
||||||
|
name = "Meterik, Limburg";
|
||||||
|
weatherEnabled = true;
|
||||||
|
weatherShowEffects = true;
|
||||||
|
useFahrenheit = false;
|
||||||
|
use12hourFormat = false;
|
||||||
|
showWeekNumberInCalendar = true;
|
||||||
|
showCalendarEvents = true;
|
||||||
|
showCalendarWeather = true;
|
||||||
|
analogClockInCalendar = false;
|
||||||
|
firstDayOfWeek = -1;
|
||||||
|
hideWeatherTimezone = false;
|
||||||
|
hideWeatherCityName = false;
|
||||||
|
};
|
||||||
|
calendar = {
|
||||||
|
cards = [
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "calendar-header-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "calendar-month-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "weather-card";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wallpaper = {
|
||||||
|
enabled = true;
|
||||||
|
overviewEnabled = false;
|
||||||
|
directory = "/home/kiri/media/images/wallpapers";
|
||||||
|
monitorDirectories = [ ];
|
||||||
|
enableMultiMonitorDirectories = false;
|
||||||
|
showHiddenFiles = false;
|
||||||
|
viewMode = "recursive";
|
||||||
|
setWallpaperOnAllMonitors = true;
|
||||||
|
fillMode = "crop";
|
||||||
|
fillColor = "#000000";
|
||||||
|
useSolidColor = false;
|
||||||
|
solidColor = "#1a1a2e";
|
||||||
|
automationEnabled = false;
|
||||||
|
wallpaperChangeMode = "random";
|
||||||
|
randomIntervalSec = 300;
|
||||||
|
transitionDuration = 1500;
|
||||||
|
transitionType = "random";
|
||||||
|
skipStartupTransition = false;
|
||||||
|
transitionEdgeSmoothness = 0.05;
|
||||||
|
panelPosition = "follow_bar";
|
||||||
|
hideWallpaperFilenames = false;
|
||||||
|
overviewBlur = 0.4;
|
||||||
|
overviewTint = 0.6;
|
||||||
|
useWallhaven = false;
|
||||||
|
wallhavenQuery = "";
|
||||||
|
wallhavenSorting = "relevance";
|
||||||
|
wallhavenOrder = "desc";
|
||||||
|
wallhavenCategories = "111";
|
||||||
|
wallhavenPurity = "100";
|
||||||
|
wallhavenRatios = "";
|
||||||
|
wallhavenApiKey = "";
|
||||||
|
wallhavenResolutionMode = "atleast";
|
||||||
|
wallhavenResolutionWidth = "";
|
||||||
|
wallhavenResolutionHeight = "";
|
||||||
|
sortOrder = "name";
|
||||||
|
favorites = [ ];
|
||||||
|
};
|
||||||
|
appLauncher = {
|
||||||
|
enableClipboardHistory = true;
|
||||||
|
autoPasteClipboard = false;
|
||||||
|
enableClipPreview = true;
|
||||||
|
clipboardWrapText = true;
|
||||||
|
clipboardWatchTextCommand = "wl-paste --type text --watch cliphist store";
|
||||||
|
clipboardWatchImageCommand = "wl-paste --type image --watch cliphist store";
|
||||||
|
position = "top_center";
|
||||||
|
pinnedApps = [ ];
|
||||||
|
useApp2Unit = false;
|
||||||
|
sortByMostUsed = true;
|
||||||
|
terminalCommand = "kitty -e";
|
||||||
|
customLaunchPrefixEnabled = false;
|
||||||
|
customLaunchPrefix = "";
|
||||||
|
viewMode = "grid";
|
||||||
|
showCategories = true;
|
||||||
|
iconMode = "tabler";
|
||||||
|
showIconBackground = false;
|
||||||
|
enableSettingsSearch = true;
|
||||||
|
enableWindowsSearch = true;
|
||||||
|
enableSessionSearch = true;
|
||||||
|
ignoreMouseInput = false;
|
||||||
|
screenshotAnnotationTool = "";
|
||||||
|
overviewLayer = false;
|
||||||
|
density = "default";
|
||||||
|
};
|
||||||
|
controlCenter = {
|
||||||
|
position = "close_to_bar_button";
|
||||||
|
diskPath = "/";
|
||||||
|
shortcuts = {
|
||||||
|
left = [
|
||||||
|
{
|
||||||
|
id = "Network";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "Bluetooth";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "WallpaperSelector";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "NoctaliaPerformance";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
right = [
|
||||||
|
{
|
||||||
|
id = "Notifications";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "PowerProfile";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "KeepAwake";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "NightLight";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
cards = [
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "profile-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "shortcuts-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "audio-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = false;
|
||||||
|
id = "brightness-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "weather-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "media-sysmon-card";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
systemMonitor = {
|
||||||
|
cpuWarningThreshold = 80;
|
||||||
|
cpuCriticalThreshold = 90;
|
||||||
|
tempWarningThreshold = 80;
|
||||||
|
tempCriticalThreshold = 90;
|
||||||
|
gpuWarningThreshold = 80;
|
||||||
|
gpuCriticalThreshold = 90;
|
||||||
|
memWarningThreshold = 80;
|
||||||
|
memCriticalThreshold = 90;
|
||||||
|
swapWarningThreshold = 80;
|
||||||
|
swapCriticalThreshold = 90;
|
||||||
|
diskWarningThreshold = 80;
|
||||||
|
diskCriticalThreshold = 90;
|
||||||
|
diskAvailWarningThreshold = 20;
|
||||||
|
diskAvailCriticalThreshold = 10;
|
||||||
|
batteryWarningThreshold = 20;
|
||||||
|
batteryCriticalThreshold = 5;
|
||||||
|
enableDgpuMonitoring = false;
|
||||||
|
useCustomColors = false;
|
||||||
|
warningColor = "";
|
||||||
|
criticalColor = "";
|
||||||
|
externalMonitor = "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor";
|
||||||
|
};
|
||||||
|
dock = {
|
||||||
|
enabled = false;
|
||||||
|
position = "bottom";
|
||||||
|
displayMode = "auto_hide";
|
||||||
|
backgroundOpacity = 1;
|
||||||
|
floatingRatio = 1;
|
||||||
|
size = 1;
|
||||||
|
onlySameOutput = true;
|
||||||
|
monitors = [ ];
|
||||||
|
pinnedApps = [ ];
|
||||||
|
colorizeIcons = false;
|
||||||
|
pinnedStatic = false;
|
||||||
|
inactiveIndicators = false;
|
||||||
|
deadOpacity = 0.6;
|
||||||
|
animationSpeed = 1;
|
||||||
|
};
|
||||||
|
network = {
|
||||||
|
wifiEnabled = true;
|
||||||
|
airplaneModeEnabled = false;
|
||||||
|
bluetoothRssiPollingEnabled = false;
|
||||||
|
bluetoothRssiPollIntervalMs = 60000;
|
||||||
|
wifiDetailsViewMode = "grid";
|
||||||
|
bluetoothDetailsViewMode = "grid";
|
||||||
|
bluetoothHideUnnamedDevices = false;
|
||||||
|
disableDiscoverability = false;
|
||||||
|
};
|
||||||
|
sessionMenu = {
|
||||||
|
enableCountdown = true;
|
||||||
|
countdownDuration = 10000;
|
||||||
|
position = "center";
|
||||||
|
showHeader = true;
|
||||||
|
showKeybinds = true;
|
||||||
|
largeButtonsStyle = true;
|
||||||
|
largeButtonsLayout = "single-row";
|
||||||
|
powerOptions = [
|
||||||
|
{
|
||||||
|
action = "lock";
|
||||||
|
enabled = true;
|
||||||
|
keybind = "1";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "suspend";
|
||||||
|
enabled = true;
|
||||||
|
keybind = "2";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "hibernate";
|
||||||
|
enabled = true;
|
||||||
|
keybind = "3";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "reboot";
|
||||||
|
enabled = true;
|
||||||
|
keybind = "4";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "logout";
|
||||||
|
enabled = true;
|
||||||
|
keybind = "5";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "shutdown";
|
||||||
|
enabled = true;
|
||||||
|
keybind = "6";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
notifications = {
|
||||||
|
enabled = true;
|
||||||
|
density = "default";
|
||||||
|
monitors = [ ];
|
||||||
|
location = "top_right";
|
||||||
|
overlayLayer = true;
|
||||||
|
backgroundOpacity = 1;
|
||||||
|
respectExpireTimeout = false;
|
||||||
|
lowUrgencyDuration = 3;
|
||||||
|
normalUrgencyDuration = 8;
|
||||||
|
criticalUrgencyDuration = 15;
|
||||||
|
saveToHistory = {
|
||||||
|
low = true;
|
||||||
|
normal = true;
|
||||||
|
critical = true;
|
||||||
|
};
|
||||||
|
sounds = {
|
||||||
|
enabled = false;
|
||||||
|
volume = 0.5;
|
||||||
|
separateSounds = false;
|
||||||
|
criticalSoundFile = "";
|
||||||
|
normalSoundFile = "";
|
||||||
|
lowSoundFile = "";
|
||||||
|
excludedApps = "discord,firefox,chrome,chromium,edge";
|
||||||
|
};
|
||||||
|
enableMediaToast = false;
|
||||||
|
enableKeyboardLayoutToast = true;
|
||||||
|
enableBatteryToast = true;
|
||||||
|
};
|
||||||
|
osd = {
|
||||||
|
enabled = true;
|
||||||
|
location = "top_right";
|
||||||
|
autoHideMs = 2000;
|
||||||
|
overlayLayer = true;
|
||||||
|
backgroundOpacity = 1;
|
||||||
|
enabledTypes = [
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
];
|
||||||
|
monitors = [ ];
|
||||||
|
};
|
||||||
|
audio = {
|
||||||
|
volumeStep = 5;
|
||||||
|
volumeOverdrive = false;
|
||||||
|
cavaFrameRate = 30;
|
||||||
|
visualizerType = "linear";
|
||||||
|
mprisBlacklist = [ ];
|
||||||
|
preferredPlayer = "";
|
||||||
|
volumeFeedback = false;
|
||||||
|
};
|
||||||
|
brightness = {
|
||||||
|
brightnessStep = 5;
|
||||||
|
enforceMinimum = true;
|
||||||
|
enableDdcSupport = false;
|
||||||
|
};
|
||||||
|
colorSchemes = {
|
||||||
|
useWallpaperColors = false;
|
||||||
|
predefinedScheme = "Kanagawa";
|
||||||
|
darkMode = true;
|
||||||
|
schedulingMode = "off";
|
||||||
|
manualSunrise = "06:30";
|
||||||
|
manualSunset = "18:30";
|
||||||
|
generationMethod = "tonal-spot";
|
||||||
|
monitorForColors = "";
|
||||||
|
};
|
||||||
|
templates = {
|
||||||
|
activeTemplates = [ ];
|
||||||
|
enableUserTheming = false;
|
||||||
|
};
|
||||||
|
nightLight = {
|
||||||
|
enabled = false;
|
||||||
|
forced = false;
|
||||||
|
autoSchedule = true;
|
||||||
|
nightTemp = "4000";
|
||||||
|
dayTemp = "6500";
|
||||||
|
manualSunrise = "06:30";
|
||||||
|
manualSunset = "18:30";
|
||||||
|
};
|
||||||
|
hooks = {
|
||||||
|
enabled = false;
|
||||||
|
wallpaperChange = "";
|
||||||
|
darkModeChange = "";
|
||||||
|
screenLock = "";
|
||||||
|
screenUnlock = "";
|
||||||
|
performanceModeEnabled = "";
|
||||||
|
performanceModeDisabled = "";
|
||||||
|
startup = "";
|
||||||
|
session = "";
|
||||||
|
};
|
||||||
|
plugins = {
|
||||||
|
autoUpdate = false;
|
||||||
|
};
|
||||||
|
desktopWidgets = {
|
||||||
|
enabled = false;
|
||||||
|
gridSnap = false;
|
||||||
|
monitorWidgets = [ ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
246
modules/nvf.nix
Normal file
246
modules/nvf.nix
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
flake-file.inputs.nvf.url = "github:notashelf/nvf";
|
||||||
|
|
||||||
|
lux.nvf = {
|
||||||
|
homeManager =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [ inputs.nvf.homeManagerModules.default ];
|
||||||
|
|
||||||
|
programs.nvf = {
|
||||||
|
enable = true;
|
||||||
|
settings.vim = {
|
||||||
|
# extraPlugins.kanagawa = {
|
||||||
|
# package = pkgs.vimPlugins.kanagawa-nvim;
|
||||||
|
# setup = ''vim.cmd("colorscheme kanagawa")'';
|
||||||
|
# };
|
||||||
|
|
||||||
|
augroups = [
|
||||||
|
{
|
||||||
|
clear = true;
|
||||||
|
name = "highlight-yank";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
autocmds = [
|
||||||
|
{
|
||||||
|
desc = "Highlight when yanking text";
|
||||||
|
event = [ "TextYankPost" ];
|
||||||
|
group = "highlight-yank";
|
||||||
|
callback = inputs.nixpkgs.lib.generators.mkLuaInline /* lua */ ''
|
||||||
|
function()
|
||||||
|
vim.hl.on_yank()
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
diagnostics = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
signs = true;
|
||||||
|
underline = true;
|
||||||
|
virtual_text = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
options = {
|
||||||
|
cursorline = true;
|
||||||
|
cursorlineopt = "both";
|
||||||
|
splitright = true;
|
||||||
|
splitbelow = true;
|
||||||
|
scrolloff = 5;
|
||||||
|
number = true;
|
||||||
|
relativenumber = false;
|
||||||
|
|
||||||
|
signcolumn = "yes";
|
||||||
|
|
||||||
|
list = true;
|
||||||
|
listchars = "tab:» ,trail:·,nbsp:␣";
|
||||||
|
updatetime = 250;
|
||||||
|
timeoutlen = 300;
|
||||||
|
undofile = true;
|
||||||
|
confirm = true;
|
||||||
|
inccommand = "split";
|
||||||
|
|
||||||
|
ignorecase = true;
|
||||||
|
smartcase = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
startPlugins = [ pkgs.vimPlugins.kanagawa-nvim ];
|
||||||
|
luaConfigRC.theme-config = inputs.nvf.lib.nvim.dag.entryBefore [ "pluginConfigs" ] /* lua */ ''
|
||||||
|
require('kanagawa').setup({
|
||||||
|
dimInactive = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.cmd("colorscheme kanagawa")
|
||||||
|
'';
|
||||||
|
|
||||||
|
extraPlugins.hmts = {
|
||||||
|
package = pkgs.vimPlugins.hmts-nvim;
|
||||||
|
};
|
||||||
|
|
||||||
|
languages = {
|
||||||
|
nix = {
|
||||||
|
enable = true;
|
||||||
|
format.enable = true;
|
||||||
|
treesitter.enable = true;
|
||||||
|
extraDiagnostics.enable = true;
|
||||||
|
|
||||||
|
lsp.enable = true;
|
||||||
|
lsp.servers = [ "nixd" ];
|
||||||
|
format.type = [ "nixfmt" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
qml = {
|
||||||
|
enable = true;
|
||||||
|
format.enable = true;
|
||||||
|
lsp.enable = true;
|
||||||
|
treesitter.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
python = {
|
||||||
|
enable = true;
|
||||||
|
format.enable = true;
|
||||||
|
lsp.enable = true;
|
||||||
|
treesitter.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
formatter.conform-nvim.enable = true;
|
||||||
|
|
||||||
|
lsp = {
|
||||||
|
enable = true;
|
||||||
|
formatOnSave = true;
|
||||||
|
inlayHints.enable = true;
|
||||||
|
lspconfig.enable = true;
|
||||||
|
lspkind.enable = true;
|
||||||
|
trouble.enable = true;
|
||||||
|
|
||||||
|
servers.nixd.settings =
|
||||||
|
let
|
||||||
|
flake = ''(builtins.getFlake "/home/kiri/.config/nixos")'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
nixd = {
|
||||||
|
formatting.command = [ "nixfmt" ];
|
||||||
|
nixpkgs.expr = "import ${flake}.inputs.nixpkgs {}";
|
||||||
|
options = {
|
||||||
|
nixos.expr = "${flake}.nixosConfigurations.polaris.options";
|
||||||
|
home-manager.expr = "${flake}.nixosConfigurations.polaris.options.home-manager.users.type.getSubOptions []";
|
||||||
|
flake-parts.expr = "${flake}.debug.options";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
projects.project-nvim = {
|
||||||
|
enable = true;
|
||||||
|
setupOpts = {
|
||||||
|
manual_mode = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
utility.sleuth.enable = true;
|
||||||
|
|
||||||
|
telescope = {
|
||||||
|
enable = true;
|
||||||
|
setupOpts = {
|
||||||
|
defaults = {
|
||||||
|
color_devicons = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extensions = [
|
||||||
|
{
|
||||||
|
name = "fzf";
|
||||||
|
packages = [ pkgs.vimPlugins.telescope-fzf-native-nvim ];
|
||||||
|
setup = {
|
||||||
|
fzf = {
|
||||||
|
fuzzy = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
mini = {
|
||||||
|
ai.enable = true;
|
||||||
|
surround.enable = true;
|
||||||
|
files.enable = true;
|
||||||
|
hipatterns = {
|
||||||
|
enable = true;
|
||||||
|
setupOpts = {
|
||||||
|
highlighters = {
|
||||||
|
fixme = {
|
||||||
|
pattern = "%f[%w]()FIXME()%f[%W]";
|
||||||
|
group = "MiniHipatternsFixme";
|
||||||
|
};
|
||||||
|
hack = {
|
||||||
|
pattern = "%f[%w]()HACK()%f[%W]";
|
||||||
|
group = "MiniHipatternsHack";
|
||||||
|
};
|
||||||
|
todo = {
|
||||||
|
pattern = "%f[%w]()TODO()%f[%W]";
|
||||||
|
group = "MiniHipatternsTodo";
|
||||||
|
};
|
||||||
|
note = {
|
||||||
|
pattern = "%f[%w]()NOTE()%f[%W]";
|
||||||
|
group = "MiniHipatternsNote";
|
||||||
|
};
|
||||||
|
|
||||||
|
hex_color =
|
||||||
|
inputs.nixpkgs.lib.mkLuaInline
|
||||||
|
/* lua */ "require('mini.hipatterns').gen_highlighter.hex_color()";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
icons.enable = true;
|
||||||
|
indentscope.enable = true;
|
||||||
|
indentscope.setupOpts = {
|
||||||
|
symbol = "│";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
autopairs.nvim-autopairs.enable = true;
|
||||||
|
|
||||||
|
ui = {
|
||||||
|
colorful-menu-nvim.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
luaConfigRC.mini-icons-mock = inputs.nvf.lib.nvim.dag.entryAfter [ "pluginConfigs" ] /* lua */ ''
|
||||||
|
require('mini.icons').mock_nvim_web_devicons()
|
||||||
|
'';
|
||||||
|
|
||||||
|
statusline.lualine.enable = true;
|
||||||
|
|
||||||
|
binds.whichKey = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
autocomplete.blink-cmp = {
|
||||||
|
enable = true;
|
||||||
|
mappings = {
|
||||||
|
confirm = "<C-l>";
|
||||||
|
next = "<C-j>";
|
||||||
|
previous = "<C-k>";
|
||||||
|
};
|
||||||
|
setupOpts = {
|
||||||
|
cmdline.keymap.preset = "inherit";
|
||||||
|
cmdline.completion.menu.auto_show = true;
|
||||||
|
|
||||||
|
sources.default = [
|
||||||
|
"lsp"
|
||||||
|
"path"
|
||||||
|
"snippets"
|
||||||
|
];
|
||||||
|
|
||||||
|
signature.enabled = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
65
modules/orion-disk-config.nix
Normal file
65
modules/orion-disk-config.nix
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
flake-file.inputs.disko.url = "github:nix-community/disko";
|
||||||
|
|
||||||
|
den.aspects.orion = {
|
||||||
|
nixos =
|
||||||
|
{ lib, ... }:
|
||||||
|
{
|
||||||
|
imports = [ inputs.disko.nixosModules.disko ];
|
||||||
|
|
||||||
|
disko.devices = {
|
||||||
|
disk.disk1 = {
|
||||||
|
device = lib.mkDefault "/dev/sda";
|
||||||
|
type = "disk";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
boot = {
|
||||||
|
name = "boot";
|
||||||
|
size = "1M";
|
||||||
|
type = "EF02";
|
||||||
|
};
|
||||||
|
esp = {
|
||||||
|
name = "ESP";
|
||||||
|
size = "500M";
|
||||||
|
type = "EF00";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
root = {
|
||||||
|
name = "root";
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "lvm_pv";
|
||||||
|
vg = "pool";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
lvm_vg = {
|
||||||
|
pool = {
|
||||||
|
type = "lvm_vg";
|
||||||
|
lvs = {
|
||||||
|
root = {
|
||||||
|
size = "100%FREE";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "ext4";
|
||||||
|
mountpoint = "/";
|
||||||
|
mountOptions = [
|
||||||
|
"defaults"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
43
modules/orion-hardware.nix
Normal file
43
modules/orion-hardware.nix
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/system.nix instead.
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
den.aspects.orion = {
|
||||||
|
nixos =
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [
|
||||||
|
"ata_piix"
|
||||||
|
"uhci_hcd"
|
||||||
|
"virtio_pci"
|
||||||
|
"virtio_scsi"
|
||||||
|
"sd_mod"
|
||||||
|
"sr_mod"
|
||||||
|
];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
# 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.ens18.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
134
modules/orion.nix
Normal file
134
modules/orion.nix
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
{ den, lib, ... }:
|
||||||
|
{
|
||||||
|
den.aspects.orion = {
|
||||||
|
includes = [
|
||||||
|
(
|
||||||
|
{ host, ... }:
|
||||||
|
{
|
||||||
|
# Start all user services on boot not on login (useful for syncthing)
|
||||||
|
nixos.users.users = lib.mapAttrs (_: _: { linger = true; }) host.users;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
];
|
||||||
|
|
||||||
|
nixos =
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.kitty
|
||||||
|
];
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
firewall.enable = true;
|
||||||
|
firewall.allowPing = false;
|
||||||
|
nftables.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Use ssh authorization for sudo instead of password
|
||||||
|
security.pam = {
|
||||||
|
sshAgentAuth.enable = true;
|
||||||
|
services.sudo.sshAgentAuth = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services = {
|
||||||
|
caddy = {
|
||||||
|
enable = true;
|
||||||
|
email = "mail@jelles.net";
|
||||||
|
openFirewall = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
openssh = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
PermitRootLogin = "no";
|
||||||
|
PasswordAuthentication = false;
|
||||||
|
# TODO: Retrieve usernames dynamically
|
||||||
|
AllowUsers = [
|
||||||
|
"kiri"
|
||||||
|
"git"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vaultwarden = {
|
||||||
|
enable = true;
|
||||||
|
backupDir = "/var/backup/vaultwarden";
|
||||||
|
config = {
|
||||||
|
DOMAIN = "https://vault.jelles.net";
|
||||||
|
SIGNUPS_ALLOWED = false;
|
||||||
|
ROCKET_PORT = 8100;
|
||||||
|
ROCKET_LOG = "critical";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
caddy.virtualHosts."vault.jelles.net".extraConfig =
|
||||||
|
"reverse_proxy :${toString config.services.vaultwarden.config.ROCKET_PORT}";
|
||||||
|
|
||||||
|
radicale = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
server.hosts = [ "127.0.0.1:5232" ];
|
||||||
|
|
||||||
|
auth = {
|
||||||
|
type = "htpasswd";
|
||||||
|
# TODO: Get password file from SOPS
|
||||||
|
htpasswd_filename = "/var/lib/radicale/users";
|
||||||
|
htpasswd_encryption = "bcrypt";
|
||||||
|
};
|
||||||
|
|
||||||
|
storage.filesystem_folder = "/var/lib/radicale/collections";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# TODO: Is this extensive config necessary?
|
||||||
|
caddy.virtualHosts."radicale.jelles.net".extraConfig = ''
|
||||||
|
reverse_proxy :5232 {
|
||||||
|
header_up X-Script-Name /
|
||||||
|
header_up X-Forwarded-For {remote}
|
||||||
|
header_up X-Remote-User {http.auth.user.id}
|
||||||
|
}'';
|
||||||
|
|
||||||
|
actual = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = false;
|
||||||
|
settings = {
|
||||||
|
port = 3000;
|
||||||
|
hostname = "127.0.0.1";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
caddy.virtualHosts."finance.jelles.net".extraConfig =
|
||||||
|
"reverse_proxy :${toString config.services.actual.settings.port}";
|
||||||
|
|
||||||
|
gitea = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
server = {
|
||||||
|
DOMAIN = "git.jelles.net";
|
||||||
|
ROOT_URL = "https://git.jelles.net/";
|
||||||
|
HTTP_PORT = 3001;
|
||||||
|
HTTP_ADDR = "127.0.0.1";
|
||||||
|
|
||||||
|
START_SSH_SERVER = false;
|
||||||
|
SSH_PORT = 22;
|
||||||
|
};
|
||||||
|
|
||||||
|
service = {
|
||||||
|
DISABLE_REGISTRATION = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
caddy.virtualHosts."git.jelles.net".extraConfig =
|
||||||
|
"reverse_proxy :${toString config.services.gitea.settings.server.HTTP_PORT}";
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
# TODO: Username dynamically
|
||||||
|
users.users.kiri = {
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAU2LydkXRTtNFY7oyX8JQURwXLVhB71DeK8XzrXeFX1 openpgp:0xA490D93A"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
79
modules/pim.nix
Normal file
79
modules/pim.nix
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
lux.pim = {
|
||||||
|
homeManager =
|
||||||
|
{ config, ... }:
|
||||||
|
let
|
||||||
|
calendarsPath = "${config.xdg.dataHome}/calendars";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
programs.pimsync.enable = true;
|
||||||
|
services.pimsync.enable = true;
|
||||||
|
|
||||||
|
programs.khal = {
|
||||||
|
# FIXME: Temporarily disabled because of bug in nixpkgs-unstable (27-02-26)
|
||||||
|
enable = false;
|
||||||
|
locale = {
|
||||||
|
timeformat = "%H:%M";
|
||||||
|
dateformat = "$m-$d";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.todoman = {
|
||||||
|
enable = true;
|
||||||
|
glob = "*/*";
|
||||||
|
extraConfig = ''
|
||||||
|
date_format = "%Y-%m-%d"
|
||||||
|
time_format = "%H:%M"
|
||||||
|
default_list = "personal"
|
||||||
|
default_due = 0
|
||||||
|
default_command = "list --sort priority,due"
|
||||||
|
humanize = True
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
accounts.calendar = {
|
||||||
|
basePath = calendarsPath;
|
||||||
|
accounts = {
|
||||||
|
"radicale" = {
|
||||||
|
primary = true;
|
||||||
|
primaryCollection = "personal";
|
||||||
|
|
||||||
|
local = {
|
||||||
|
type = "filesystem";
|
||||||
|
fileExt = ".ics";
|
||||||
|
};
|
||||||
|
|
||||||
|
remote = {
|
||||||
|
url = "https://radicale.jelles.net/";
|
||||||
|
type = "caldav";
|
||||||
|
userName = "kiri";
|
||||||
|
passwordCommand = [
|
||||||
|
"rbw"
|
||||||
|
"get"
|
||||||
|
"Radicale"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
pimsync = {
|
||||||
|
enable = true;
|
||||||
|
extraPairDirectives = [
|
||||||
|
{
|
||||||
|
name = "collections";
|
||||||
|
params = [ "from b" ];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
khal = {
|
||||||
|
enable = true;
|
||||||
|
type = "discover";
|
||||||
|
color = "light blue";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
51
modules/polaris-hardware.nix
Normal file
51
modules/polaris-hardware.nix
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
{ inputs, den, ... }:
|
||||||
|
{
|
||||||
|
den.aspects.polaris = {
|
||||||
|
nixos =
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
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/bda7f8b9-2b3d-4190-8518-baa50490227e";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-uuid/26FE-CA37";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [
|
||||||
|
"fmask=0077"
|
||||||
|
"dmask=0077"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [ ];
|
||||||
|
|
||||||
|
networking.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
14
modules/polaris.nix
Normal file
14
modules/polaris.nix
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{ inputs, den, ... }:
|
||||||
|
{
|
||||||
|
flake-file.inputs.nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||||
|
|
||||||
|
den.aspects.polaris = {
|
||||||
|
includes = [ den.ful.lux.workstation ];
|
||||||
|
nixos.imports = with inputs.nixos-hardware.nixosModules; [
|
||||||
|
common-pc
|
||||||
|
common-pc-ssd
|
||||||
|
common-cpu-amd
|
||||||
|
common-gpu-amd
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
21
modules/region.nix
Normal file
21
modules/region.nix
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
den.default.nixos = {
|
||||||
|
time.timeZone = "Europe/Amsterdam";
|
||||||
|
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
i18n.extraLocaleSettings = {
|
||||||
|
LC_MEASUREMENT = "nl_NL.UTF-8";
|
||||||
|
LC_PAPER = "nl_NL.UTF-8";
|
||||||
|
LC_ADDRESS = "nl_NL.UTF-8";
|
||||||
|
LC_TELEPHONE = "nl_NL.UTF-8";
|
||||||
|
LC_NAME = "nl_NL.UTF-8";
|
||||||
|
|
||||||
|
# Use '.' as decimal point and ',' as thouands separator
|
||||||
|
LC_NUMERIC = "en_IE.UTF-8";
|
||||||
|
LC_MONETARY = "en_IE.UTF-8";
|
||||||
|
|
||||||
|
# English day and month names, YYYY-MM-DD format
|
||||||
|
LC_TIME = "en_IE.UTF-8";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
17
modules/sddm.nix
Normal file
17
modules/sddm.nix
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
lux.greeter = {
|
||||||
|
nixos =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
services.displayManager.sddm = {
|
||||||
|
enable = true;
|
||||||
|
wayland.enable = true;
|
||||||
|
theme = "${pkgs.sddm-astronaut}/share/sddm/themes/sddm-astronaut-theme";
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
kdePackages.qtmultimedia
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
11
modules/secrets/.sops.yaml
Normal file
11
modules/secrets/.sops.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
keys:
|
||||||
|
- &polaris age122w85pqj508ukv0rd388mahecgfckmpgnsgz0zcyec37ljae2epsdnvxpl
|
||||||
|
- &altair age15mg7k37mc3ll60rfzx4zpzp50xjefzwy0ayjpstq5ce7raem3a7sef57w7
|
||||||
|
- &orion age1l49tm85prcpm4q8e0hxxetv08jqv3gfty3pvzte956dng4h0xaeq0he5yd
|
||||||
|
creation_rules:
|
||||||
|
- path_regex: secrets.yaml$
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *polaris
|
||||||
|
- *altair
|
||||||
|
- *orion
|
||||||
38
modules/secrets/secrets.yaml
Normal file
38
modules/secrets/secrets.yaml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
radicale_pass: ENC[AES256_GCM,data:zdUxtJKNPC8SzajhFKo=,iv:H55GWMiQLJvZx6rAufkk807lZflg0sepxoq6z0XJ/q4=,tag:MoDOuF37PeF7QEpUxBntEg==,type:str]
|
||||||
|
university_calendar_url: ENC[AES256_GCM,data:y5UtZVC0KJPUz//6S0QsrNeFGQshc88zieQgmlur75VFw9y5CJpnZRpdhLnYva00z5HBkxYQelLqS/I5GrXexWtC7Y7d1dCcQ+IZ0K7GGJ5NrYtjNXfMhzNSlhqjvl5lBGb+S565kel3VsCTyo/YRxdbBN6FA/oQNsx8/AvTgtsPeFkQRDGlGkybFRfWHWuTIDLL,iv:rZK9utRrm/KAkVRUjC3VR09MvDZjpoLx7BgaidzQo3o=,tag:tGWGoQCsS3zZh818OKixPw==,type:str]
|
||||||
|
ssh_config_orion: ENC[AES256_GCM,data:P2jH5BDIzeHSIwTBcZwTOXKes727xK0Xoj9W64GmEszEPZw8vA==,iv:hSY9mFdC82pBbOjMFuzoR2eufhjY2MGERJ4ODmcogbA=,tag:ejF535LrQwwH66nQG3qLGw==,type:str]
|
||||||
|
orion_ip: ENC[AES256_GCM,data:RCK6EKOEDaTu1uR2d/8=,iv:5JhIkVQEELB6MoPh49xq+0CrbPjI/6+qfqUHRqCza5s=,tag:+00T4+pWOWRj7R1ft39HAw==,type:str]
|
||||||
|
hashed-password-kiri: ENC[AES256_GCM,data:xubN5stH4RPlHYl+Jzcu2BCepz3Hra3TxjiSspktzjgpEWrU79h3NbcPMrYC0MSjsv3oaWio/S7nBV3Tes3WBlI9EC9vq+6tyTVPynUqpB7c9CvvYSmqc9bAHOnIOBb+gP2RR6JB395UoQ==,iv:uN83RNTfCJdBDhFhywV5NbVBp4xcptqzoKVAoAnaiQk=,tag:x9yufiPdSJwBADT6QymExA==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- recipient: age122w85pqj508ukv0rd388mahecgfckmpgnsgz0zcyec37ljae2epsdnvxpl
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByTU9pQS92dlJKQzZjaHFN
|
||||||
|
SHFHaEJWWVNsMC9KN1hlc2NNTUtCY1pkREJnCm4yY20vYzFqZG1yZWJZN2JTSW5U
|
||||||
|
Q3dQUkJJalhhbFc4U2Q1dUhpWDRua1UKLS0tIHRuaGUvK2crQUFQRm1DK3UwelJy
|
||||||
|
N1NPUHdlcW1kSUJidi9Dc1R6N0oyYUUKnt3m3NQb3e+kEC4LRiJ2JW38Hnw8zpTM
|
||||||
|
hUITQQXZ6KmYoq+3AXJJbePcK+MAuS7VLlecVbhAq25FiDtZkdky5A==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age15mg7k37mc3ll60rfzx4zpzp50xjefzwy0ayjpstq5ce7raem3a7sef57w7
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrVCtUY2hMcUtaaXlPd3Zh
|
||||||
|
bXBtSjIxWUFUMnFCQUdWdk9pVlhRa0F0TWc0CjhEYVAwTHliV2sweUN3aytvS2lu
|
||||||
|
djdUeG9IYXYxMlBqdklRdGhtWlh0bzQKLS0tIFZpeld1bFArR3h1NXBIeS84eUxr
|
||||||
|
ZkVRcExsbmJBR1p3QVBwTzRGZ2NWbDgK3yBC0dGsiQKZ+f4eeMFQC//1ASacCkgJ
|
||||||
|
0q0rH6YHyqX2ojqLqvpiQUIstCsdohlj36KLc+ziFAOOFyoe7tB7Kg==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age1l49tm85prcpm4q8e0hxxetv08jqv3gfty3pvzte956dng4h0xaeq0he5yd
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwNUM2UE1sNUVyYncrY3Jr
|
||||||
|
OE5OWWJidEZqdWdJSkZSUUEzKzJSb2w1akZNClN4ZlhlSXBKVkJWL3NwazlNYjFR
|
||||||
|
dmhoaTArVmpKMjdQajJxZEF2a2dUT1EKLS0tIDdvRXhsYk5uN3gwbkViVEIxZksw
|
||||||
|
YlZ4VGIzaE5kQ3ZSczI2Wk5IU1UvOXcKqkj/OYP37+60Gr2xJmPE9O7HB7LCu4Tp
|
||||||
|
AvvoMQLkkvVJ30Y03pfEzIMnvJHKREy9zDOScfqUflDk79mcDaDhvg==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
lastmodified: "2026-02-16T13:53:22Z"
|
||||||
|
mac: ENC[AES256_GCM,data:DuGE9Ovae5Y2Qpm5v8OYgFC2/u/Yzprv+ImmX1OVsh5KjGS26HaX1HLbzGu7NZCMfg2ZrJ5BeFNCO3UaZ7tXNoWGKxQZRNYpAH8PjI225l+GWozcva0on6S0UD2MhtKkpFPFUg1uEDSzqwMoXgPbWoB1W0VeAOkfAhKM9j/tggs=,iv:/Hsh9JvdcZMy7v4tLGaBwDlMIf5HBta3GeZC5gDUO9k=,tag:mtwqk41SA9qzIw+cVDSgQg==,type:str]
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.11.0
|
||||||
26
modules/secrets/sops.nix
Normal file
26
modules/secrets/sops.nix
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
flake-file.inputs.sops-nix.url = "github:Mic92/sops-nix";
|
||||||
|
|
||||||
|
den.default = {
|
||||||
|
nixos =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [ inputs.sops-nix.nixosModules.sops ];
|
||||||
|
|
||||||
|
sops = {
|
||||||
|
age.keyFile = "/home/kiri/.config/sops/age/keys.txt";
|
||||||
|
defaultSopsFile = ./secrets.yaml;
|
||||||
|
secrets = {
|
||||||
|
hashed-password-kiri.neededForUsers = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
sops
|
||||||
|
age
|
||||||
|
];
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
189
modules/shell.nix
Normal file
189
modules/shell.nix
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
lux.shell = {
|
||||||
|
homeManager =
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
# Delete zcompdump on config switch, so that we regenerate completions
|
||||||
|
home.activation = {
|
||||||
|
clearZshCompDump = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||||
|
rm -f '${config.programs.zsh.dotDir}/.zcompdump*'
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.zsh = {
|
||||||
|
enable = true;
|
||||||
|
dotDir = "${config.xdg.configHome}/zsh";
|
||||||
|
|
||||||
|
enableCompletion = true;
|
||||||
|
completionInit = ''
|
||||||
|
setopt EXTENDED_GLOB
|
||||||
|
|
||||||
|
autoload -U compinit
|
||||||
|
local dump_path="${config.programs.zsh.dotDir}/.zcompdump"
|
||||||
|
local cache_check=( $dump_path(#qN.mh-24) )
|
||||||
|
|
||||||
|
if (( $#cache_check )); then
|
||||||
|
# Array has items: File exists and is new
|
||||||
|
compinit -C
|
||||||
|
else
|
||||||
|
# Array is empty: File is older than 24 hours OR doesn't exist
|
||||||
|
compinit
|
||||||
|
zcompile "$dump_path" &
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
autosuggestion.enable = true;
|
||||||
|
|
||||||
|
syntaxHighlighting = {
|
||||||
|
enable = true;
|
||||||
|
highlighters = [
|
||||||
|
"main"
|
||||||
|
"brackets"
|
||||||
|
"pattern"
|
||||||
|
"regexp"
|
||||||
|
"root"
|
||||||
|
"line"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
historySubstringSearch.enable = true;
|
||||||
|
|
||||||
|
history = {
|
||||||
|
ignoreDups = true;
|
||||||
|
save = 10000;
|
||||||
|
size = 10000;
|
||||||
|
path = "${config.xdg.dataHome}/zsh_history";
|
||||||
|
};
|
||||||
|
|
||||||
|
profileExtra = lib.optionalString (config.home.sessionPath != [ ]) ''
|
||||||
|
export PATH="$PATH''${PATH:+:}${lib.concatStringsSep ":" config.home.sessionPath}"
|
||||||
|
'';
|
||||||
|
|
||||||
|
initContent =
|
||||||
|
# bash
|
||||||
|
''
|
||||||
|
bindkey -v
|
||||||
|
|
||||||
|
export KEYTIMEOUT=1
|
||||||
|
|
||||||
|
# search history based on what's typed in the prompt
|
||||||
|
autoload -U history-search-end
|
||||||
|
zle -N history-beginning-search-backward-end history-search-end
|
||||||
|
zle -N history-beginning-search-forward-end history-search-end
|
||||||
|
bindkey "^[OA" history-beginning-search-backward-end
|
||||||
|
bindkey "^[OB" history-beginning-search-forward-end
|
||||||
|
|
||||||
|
# General completion behavior
|
||||||
|
zstyle ':completion:*' completer _extensions _complete _approximate
|
||||||
|
|
||||||
|
# Use cache
|
||||||
|
zstyle ':completion:*' use-cache on
|
||||||
|
zstyle ':completion:*' cache-path "$XDG_CACHE_HOME/zsh/.zcompcache"
|
||||||
|
|
||||||
|
# Complete the alias
|
||||||
|
zstyle ':completion:*' complete true
|
||||||
|
|
||||||
|
# Autocomplete options
|
||||||
|
zstyle ':completion:*' complete-options true
|
||||||
|
|
||||||
|
# Completion matching control
|
||||||
|
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
|
||||||
|
zstyle ':completion:*' keep-prefix true
|
||||||
|
|
||||||
|
# Group matches and describe
|
||||||
|
zstyle ':completion:*' menu select
|
||||||
|
zstyle ':completion:*' list-grouped false
|
||||||
|
zstyle ':completion:*' list-separator '''
|
||||||
|
zstyle ':completion:*' group-name '''
|
||||||
|
zstyle ':completion:*' verbose yes
|
||||||
|
zstyle ':completion:*:matches' group 'yes'
|
||||||
|
zstyle ':completion:*:warnings' format '%F{red}%B-- No match for: %d --%b%f'
|
||||||
|
zstyle ':completion:*:messages' format '%d'
|
||||||
|
zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b'
|
||||||
|
zstyle ':completion:*:descriptions' format '[%d]'
|
||||||
|
|
||||||
|
# Colors
|
||||||
|
zstyle ':completion:*' list-colors ''${(s.:.)LS_COLORS}
|
||||||
|
|
||||||
|
# case insensitive tab completion
|
||||||
|
zstyle ':completion:*:*:cd:*' tag-order local-directories directory-stack path-directories
|
||||||
|
zstyle ':completion:*:*:cd:*:directory-stack' menu yes select
|
||||||
|
zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand'
|
||||||
|
zstyle ':completion:*:*:-command-:*:*' group-order aliases builtins functions commands
|
||||||
|
zstyle ':completion:*' special-dirs true
|
||||||
|
zstyle ':completion:*' squeeze-slashes true
|
||||||
|
|
||||||
|
# Sort
|
||||||
|
zstyle ':completion:*' sort false
|
||||||
|
zstyle ":completion:*:git-checkout:*" sort false
|
||||||
|
zstyle ':completion:*' file-sort modification
|
||||||
|
zstyle ':completion:*:eza' sort false
|
||||||
|
zstyle ':completion:complete:*:options' sort false
|
||||||
|
zstyle ':completion:files' sort false
|
||||||
|
|
||||||
|
${lib.optionalString config.services.gpg-agent.enable ''
|
||||||
|
gnupg_path=$(ls $XDG_RUNTIME_DIR/gnupg)
|
||||||
|
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gnupg/$gnupg_path/S.gpg-agent.ssh"
|
||||||
|
''}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.starship = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
settings = {
|
||||||
|
add_newline = true;
|
||||||
|
|
||||||
|
format = lib.concatStrings [
|
||||||
|
"$nix_shell"
|
||||||
|
"$hostname"
|
||||||
|
"$directory"
|
||||||
|
"$git_branch"
|
||||||
|
"$git_state"
|
||||||
|
"$git_status"
|
||||||
|
"$line_break"
|
||||||
|
"$character"
|
||||||
|
];
|
||||||
|
|
||||||
|
directory = {
|
||||||
|
truncation_length = 99;
|
||||||
|
truncate_to_repo = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
nix_shell = {
|
||||||
|
format = "[$symbol]($style) ";
|
||||||
|
symbol = "🐚";
|
||||||
|
style = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
git_status = {
|
||||||
|
format = "[[(*$conflicted$untracked$modified$staged$renamed$deleted)](218)($ahead_behind$stashed)]($style)";
|
||||||
|
style = "cyan";
|
||||||
|
conflicted = "";
|
||||||
|
renamed = "";
|
||||||
|
deleted = "";
|
||||||
|
stashed = "≡";
|
||||||
|
};
|
||||||
|
|
||||||
|
git_state = {
|
||||||
|
format = "([$state( $progress_current/$progress_total)]($style)) ";
|
||||||
|
style = "bright-black";
|
||||||
|
};
|
||||||
|
|
||||||
|
line_break = {
|
||||||
|
disabled = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.eza = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.fzf = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
10
modules/state.nix
Normal file
10
modules/state.nix
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
den.default =
|
||||||
|
let
|
||||||
|
configState = "24.05";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
nixos.system.stateVersion = configState;
|
||||||
|
homeManager.home.stateVersion = configState;
|
||||||
|
};
|
||||||
|
}
|
||||||
49
modules/syncthing.nix
Normal file
49
modules/syncthing.nix
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
den,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
meshDevices = lib.listToAttrs (
|
||||||
|
lib.concatMap (
|
||||||
|
host:
|
||||||
|
lib.mapAttrsToList (
|
||||||
|
userName: user:
|
||||||
|
let
|
||||||
|
name = "${userName}@${host.name}";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
inherit name;
|
||||||
|
value = {
|
||||||
|
inherit name;
|
||||||
|
id = user.syncthingId;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
) (lib.filterAttrs (_: u: u ? syncthingId) host.users)
|
||||||
|
) (lib.attrValues den.hosts.x86_64-linux)
|
||||||
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
lux.syncthing = {
|
||||||
|
homeManager = {
|
||||||
|
services.syncthing = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
overrideDevices = true;
|
||||||
|
overrideFolders = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
folders = {
|
||||||
|
sync = {
|
||||||
|
path = "~/sync";
|
||||||
|
label = "sync";
|
||||||
|
devices = lib.attrNames meshDevices;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
devices = meshDevices;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
88
modules/terminal.nix
Normal file
88
modules/terminal.nix
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
lux.terminal = {
|
||||||
|
homeManager =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
programs.alacritty = {
|
||||||
|
enable = true;
|
||||||
|
theme = "kanagawa_wave";
|
||||||
|
settings = {
|
||||||
|
window.padding = {
|
||||||
|
x = 5;
|
||||||
|
y = 5;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.kitty = {
|
||||||
|
enable = true;
|
||||||
|
font = {
|
||||||
|
name = "JetBrains Mono";
|
||||||
|
size = 11;
|
||||||
|
};
|
||||||
|
settings = {
|
||||||
|
# Fonts
|
||||||
|
disable_ligatures = "always";
|
||||||
|
|
||||||
|
# Scrollback
|
||||||
|
scrollback_lines = 10000;
|
||||||
|
|
||||||
|
# Terminal bell
|
||||||
|
enable_audio_bell = false;
|
||||||
|
|
||||||
|
# Window layout
|
||||||
|
confirm_os_window_close = 0;
|
||||||
|
window_padding_width = 5;
|
||||||
|
|
||||||
|
# Advanced
|
||||||
|
update_check_interval = 0;
|
||||||
|
};
|
||||||
|
extraConfig = ''
|
||||||
|
## name: Kanagawa
|
||||||
|
## license: MIT
|
||||||
|
## author: Tommaso Laurenzi
|
||||||
|
## upstream: https://github.com/rebelot/kanagawa.nvim/
|
||||||
|
|
||||||
|
background #1F1F28
|
||||||
|
foreground #DCD7BA
|
||||||
|
selection_background #2D4F67
|
||||||
|
selection_foreground #C8C093
|
||||||
|
url_color #72A7BC
|
||||||
|
cursor #C8C093
|
||||||
|
|
||||||
|
# Tabs
|
||||||
|
active_tab_background #1F1F28
|
||||||
|
active_tab_foreground #C8C093
|
||||||
|
inactive_tab_background #1F1F28
|
||||||
|
inactive_tab_foreground #727169
|
||||||
|
#tab_bar_background #15161E
|
||||||
|
|
||||||
|
# normal
|
||||||
|
color0 #16161D
|
||||||
|
color1 #C34043
|
||||||
|
color2 #76946A
|
||||||
|
color3 #C0A36E
|
||||||
|
color4 #7E9CD8
|
||||||
|
color5 #957FB8
|
||||||
|
color6 #6A9589
|
||||||
|
color7 #C8C093
|
||||||
|
|
||||||
|
# bright
|
||||||
|
color8 #727169
|
||||||
|
color9 #E82424
|
||||||
|
color10 #98BB6C
|
||||||
|
color11 #E6C384
|
||||||
|
color12 #7FB4CA
|
||||||
|
color13 #938AA9
|
||||||
|
color14 #7AA89F
|
||||||
|
color15 #DCD7BA
|
||||||
|
|
||||||
|
# extended colors
|
||||||
|
color16 #FFA066
|
||||||
|
color17 #FF5D62
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
21
modules/users.nix
Normal file
21
modules/users.nix
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
let
|
||||||
|
den-lib = inputs.den.lib;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# Functions exist in den already but good practice to write it myself
|
||||||
|
lux.utils.provides = {
|
||||||
|
define-user =
|
||||||
|
{
|
||||||
|
user,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
nixos = {
|
||||||
|
users.users."${user}" = {
|
||||||
|
isNormalUser = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
24
modules/vm.nix
Normal file
24
modules/vm.nix
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# enables `nix run .#vm`. it is very useful to have a VM
|
||||||
|
# you can edit your config and launch the VM to test stuff
|
||||||
|
# instead of having to reboot each time.
|
||||||
|
{ inputs, den, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
# USER TODO: remove this tty-autologin used for the VM
|
||||||
|
den.aspects.igloo.includes = [ (den.provides.tty-autologin "tux") ];
|
||||||
|
|
||||||
|
perSystem =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
packages.vm = pkgs.writeShellApplication {
|
||||||
|
name = "vm";
|
||||||
|
text =
|
||||||
|
let
|
||||||
|
host = inputs.self.nixosConfigurations.igloo.config;
|
||||||
|
in
|
||||||
|
''
|
||||||
|
${host.system.build.vm}/bin/run-${host.networking.hostName}-vm "$@"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
194
modules/workstation.nix
Normal file
194
modules/workstation.nix
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
{ den, ... }:
|
||||||
|
{
|
||||||
|
lux.workstation = {
|
||||||
|
includes = [
|
||||||
|
den.ful.lux.greeter
|
||||||
|
den.ful.lux.niri
|
||||||
|
den.ful.lux.xdg
|
||||||
|
den.ful.lux.dev
|
||||||
|
den.ful.lux.terminal
|
||||||
|
den.ful.lux.shell
|
||||||
|
den.ful.lux.noctalia
|
||||||
|
den.ful.lux.pim
|
||||||
|
# den.ful.lux.nvf
|
||||||
|
den.ful.lux.neovim
|
||||||
|
den.ful.lux.email
|
||||||
|
den.ful.lux.bitwarden
|
||||||
|
den.ful.lux.ssh
|
||||||
|
den.ful.lux.helium
|
||||||
|
];
|
||||||
|
|
||||||
|
homeManager =
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
brave
|
||||||
|
localsend
|
||||||
|
postman
|
||||||
|
wl-clipboard
|
||||||
|
spotify
|
||||||
|
gemini-cli
|
||||||
|
qbittorrent
|
||||||
|
planify
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.mpv = {
|
||||||
|
enable = true;
|
||||||
|
bindings = {
|
||||||
|
D = "cycle deband";
|
||||||
|
};
|
||||||
|
config = {
|
||||||
|
profile = "high-quality";
|
||||||
|
|
||||||
|
osc = "no";
|
||||||
|
border = "no";
|
||||||
|
|
||||||
|
vo = "gpu-next";
|
||||||
|
gpu-api = "vulkan";
|
||||||
|
hwdec = "vulkan";
|
||||||
|
|
||||||
|
demuxer-mkv-subtitle-preroll = "yes";
|
||||||
|
sub-auto = "fuzzy";
|
||||||
|
|
||||||
|
sub-gauss = 1.0;
|
||||||
|
sub-gray = "yes";
|
||||||
|
|
||||||
|
tone-mapping = "bt.2446a";
|
||||||
|
|
||||||
|
keep-open = "yes";
|
||||||
|
save-position-on-quit = "yes";
|
||||||
|
|
||||||
|
volume-max = 150;
|
||||||
|
|
||||||
|
deband = "yes";
|
||||||
|
deband-iterations = 2;
|
||||||
|
deband-threshold = 64;
|
||||||
|
deband-range = 17;
|
||||||
|
deband-grain = 12;
|
||||||
|
};
|
||||||
|
scripts = with pkgs.mpvScripts; [
|
||||||
|
modernz
|
||||||
|
thumbfast
|
||||||
|
mpris
|
||||||
|
autosub
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.ripgrep.enable = true;
|
||||||
|
programs.uv.enable = true;
|
||||||
|
|
||||||
|
home.pointerCursor = {
|
||||||
|
name = "phinger-cursors-light";
|
||||||
|
package = pkgs.phinger-cursors;
|
||||||
|
size = 32;
|
||||||
|
gtk.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Make electron use wayland
|
||||||
|
home.sessionVariables = {
|
||||||
|
NIXOS_OZONE_WL = "1";
|
||||||
|
|
||||||
|
BROWSER = "brave";
|
||||||
|
EDITOR = "nvim";
|
||||||
|
VISUAL = "nvim";
|
||||||
|
|
||||||
|
CARGO_HOME = "${config.xdg.dataHome}/cargo";
|
||||||
|
STARSHIP_CACHE = "${config.xdg.cacheHome}/starship";
|
||||||
|
|
||||||
|
GEMINI_CONFIG_DIR = "${config.xdg.configHome}/gemini";
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
services.cliphist.enable = true;
|
||||||
|
services.wl-clip-persist.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
nixos =
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
# More modern version of dbus
|
||||||
|
services.dbus.implementation = "broker";
|
||||||
|
|
||||||
|
programs.nix-ld.enable = true;
|
||||||
|
environment.localBinInPath = true;
|
||||||
|
|
||||||
|
# For localsend
|
||||||
|
networking.firewall.allowedTCPPorts = [ 53317 ];
|
||||||
|
|
||||||
|
# Audio
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
jack.enable = true;
|
||||||
|
wireplumber.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Bluetooth
|
||||||
|
hardware.bluetooth.enable = true;
|
||||||
|
services.blueman.enable = true;
|
||||||
|
|
||||||
|
# Fonts
|
||||||
|
fonts = {
|
||||||
|
enableDefaultPackages = false;
|
||||||
|
packages = with pkgs; [
|
||||||
|
noto-fonts
|
||||||
|
noto-fonts-cjk-sans
|
||||||
|
noto-fonts-color-emoji
|
||||||
|
iosevka
|
||||||
|
jetbrains-mono
|
||||||
|
fira-code
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Printing
|
||||||
|
services.printing = {
|
||||||
|
enable = true;
|
||||||
|
drivers = with pkgs; [
|
||||||
|
cups-filters
|
||||||
|
cups-browsed
|
||||||
|
cnijfilter2
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Bootloader
|
||||||
|
boot = {
|
||||||
|
loader = {
|
||||||
|
efi.canTouchEfiVariables = true;
|
||||||
|
systemd-boot = {
|
||||||
|
enable = true;
|
||||||
|
consoleMode = "auto";
|
||||||
|
configurationLimit = 5;
|
||||||
|
|
||||||
|
# Convert boot entry to a more readable name
|
||||||
|
extraInstallCommands = ''
|
||||||
|
ENTRIES="${config.boot.loader.efi.efiSysMountPoint}/loader/entries"
|
||||||
|
PROFILES="/nix/var/nix/profiles"
|
||||||
|
|
||||||
|
for file in "$ENTRIES"/nixos-generation-*.conf; do
|
||||||
|
generation=$(${pkgs.coreutils}/bin/basename "$file" | ${pkgs.gnugrep}/bin/grep -o -E '[0-9]+')
|
||||||
|
timestamp=$(${pkgs.coreutils}/bin/stat -c %y "$PROFILES/system-$generation-link" 2>/dev/null | ${pkgs.coreutils}/bin/cut -d. -f1)
|
||||||
|
|
||||||
|
if [ -z "$timestamp" ]; then
|
||||||
|
timestamp="Unknown Date"
|
||||||
|
fi
|
||||||
|
|
||||||
|
${pkgs.gnused}/bin/sed -i "s/^version .*/version Generation $generation - $timestamp/" "$file"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
tmp.cleanOnBoot = true;
|
||||||
|
kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
40
modules/xdg.nix
Normal file
40
modules/xdg.nix
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
lux.xdg = {
|
||||||
|
homeManager =
|
||||||
|
{ config, ... }:
|
||||||
|
let
|
||||||
|
homeDir = config.home.homeDirectory;
|
||||||
|
localDir = "${homeDir}/.local";
|
||||||
|
mediaDir = "${homeDir}/media";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
xdg = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
cacheHome = "${localDir}/cache";
|
||||||
|
configHome = "${homeDir}/.config";
|
||||||
|
dataHome = "${localDir}/share";
|
||||||
|
stateHome = "${localDir}/state";
|
||||||
|
|
||||||
|
userDirs = {
|
||||||
|
enable = true;
|
||||||
|
createDirectories = true;
|
||||||
|
|
||||||
|
download = "${homeDir}/downloads";
|
||||||
|
documents = "${homeDir}/documents";
|
||||||
|
|
||||||
|
# Organize into media folder
|
||||||
|
music = "${mediaDir}/music";
|
||||||
|
pictures = "${mediaDir}/images";
|
||||||
|
videos = "${mediaDir}/videos";
|
||||||
|
|
||||||
|
# Hide these
|
||||||
|
desktop = "${localDir}/desktop";
|
||||||
|
publicShare = "${localDir}/public";
|
||||||
|
templates = "${localDir}/templates";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
101
programs/helium.nix
Normal file
101
programs/helium.nix
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
unzip,
|
||||||
|
autoPatchelfHook,
|
||||||
|
stdenv,
|
||||||
|
fetchurl,
|
||||||
|
libxcb,
|
||||||
|
libx11,
|
||||||
|
libxcomposite,
|
||||||
|
libxdamage,
|
||||||
|
libxext,
|
||||||
|
libxfixes,
|
||||||
|
libxrandr,
|
||||||
|
libgbm,
|
||||||
|
cairo,
|
||||||
|
libudev-zero,
|
||||||
|
libxkbcommon,
|
||||||
|
nspr,
|
||||||
|
nss,
|
||||||
|
libcupsfilters,
|
||||||
|
pango,
|
||||||
|
qt5,
|
||||||
|
alsa-lib,
|
||||||
|
atk,
|
||||||
|
at-spi2-core,
|
||||||
|
at-spi2-atk,
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "Helium";
|
||||||
|
version = "0.8.4.1";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://github.com/imputnet/helium-linux/releases/download/${version}/helium-${version}-x86_64_linux.tar.xz";
|
||||||
|
sha256 = "sha256-M/1wGewl500vJsoYfhbgXHQ4vlI6d0PRGGGGsRol6sc=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
unzip
|
||||||
|
autoPatchelfHook
|
||||||
|
];
|
||||||
|
|
||||||
|
autoPatchelfIgnoreMissingDeps = [
|
||||||
|
"libQt6Core.so.6"
|
||||||
|
"libQt6Gui.so.6"
|
||||||
|
"libQt6Widgets.so.6"
|
||||||
|
];
|
||||||
|
|
||||||
|
runtimeDependencies = [ ];
|
||||||
|
buildInputs = [
|
||||||
|
unzip
|
||||||
|
libxcb
|
||||||
|
libx11
|
||||||
|
libxcomposite
|
||||||
|
libxdamage
|
||||||
|
libxext
|
||||||
|
libxfixes
|
||||||
|
libxrandr
|
||||||
|
libgbm
|
||||||
|
cairo
|
||||||
|
pango
|
||||||
|
libudev-zero
|
||||||
|
libxkbcommon
|
||||||
|
nspr
|
||||||
|
nss
|
||||||
|
libcupsfilters
|
||||||
|
alsa-lib
|
||||||
|
atk
|
||||||
|
at-spi2-core
|
||||||
|
at-spi2-atk
|
||||||
|
qt5.qtbase
|
||||||
|
qt5.qttools
|
||||||
|
qt5.qtx11extras
|
||||||
|
qt5.wrapQtAppsHook
|
||||||
|
];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
mkdir -p $out/bin
|
||||||
|
mv * $out/bin/
|
||||||
|
mv $out/bin/helium $out/bin/${name}
|
||||||
|
mkdir -p $out/share/applications
|
||||||
|
|
||||||
|
cat <<INI> $out/share/applications/${name}.desktop
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=${name}
|
||||||
|
GenericName=Web Browser
|
||||||
|
Terminal=false
|
||||||
|
Icon=$out/bin/product_logo_256.png
|
||||||
|
Exec=$out/bin/${name}
|
||||||
|
Type=Application
|
||||||
|
Categories=Network;WebBrowser;
|
||||||
|
INI
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://github.com/imputnet/helium-linux";
|
||||||
|
description = "A description of your application";
|
||||||
|
platforms = platforms.linux;
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user