Initial commit

This commit is contained in:
demenik
2025-12-01 18:24:34 +01:00
commit fc68fa5ce9
142 changed files with 6273 additions and 0 deletions

832
flake.lock generated Normal file
View File

@@ -0,0 +1,832 @@
{
"nodes": {
"agenix": {
"inputs": {
"darwin": "darwin",
"home-manager": "home-manager",
"nixpkgs": [
"nixpkgs"
],
"systems": "systems"
},
"locked": {
"lastModified": 1762618334,
"narHash": "sha256-wyT7Pl6tMFbFrs8Lk/TlEs81N6L+VSybPfiIgzU8lbQ=",
"owner": "ryantm",
"repo": "agenix",
"rev": "fcdea223397448d35d9b31f798479227e80183f6",
"type": "github"
},
"original": {
"owner": "ryantm",
"repo": "agenix",
"type": "github"
}
},
"ags": {
"inputs": {
"astal": "astal",
"nixpkgs": [
"statusbar",
"nixpkgs"
]
},
"locked": {
"lastModified": 1762046771,
"narHash": "sha256-baVZvZZN0t9F3fvVhxmQA1/oNykXGd/YhlF19JqCLc8=",
"owner": "aylur",
"repo": "ags",
"rev": "fe13af2daec716226ccdb3158606a8577853e0ff",
"type": "github"
},
"original": {
"owner": "aylur",
"repo": "ags",
"type": "github"
}
},
"astal": {
"inputs": {
"nixpkgs": [
"statusbar",
"ags",
"nixpkgs"
]
},
"locked": {
"lastModified": 1762012522,
"narHash": "sha256-ncEN4OVFM5M9VFc4oR3gOI5K8r99GcYxtU+Cf4Z8pbs=",
"owner": "aylur",
"repo": "astal",
"rev": "671d4229c798834190a50fb8b8d8addd19b529e9",
"type": "github"
},
"original": {
"owner": "aylur",
"repo": "astal",
"type": "github"
}
},
"base16": {
"inputs": {
"fromYaml": "fromYaml"
},
"locked": {
"lastModified": 1755819240,
"narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "base16.nix",
"type": "github"
}
},
"base16-fish": {
"flake": false,
"locked": {
"lastModified": 1754405784,
"narHash": "sha256-l9xHIy+85FN+bEo6yquq2IjD1rSg9fjfjpyGP1W8YXo=",
"owner": "tomyun",
"repo": "base16-fish",
"rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561",
"type": "github"
},
"original": {
"owner": "tomyun",
"repo": "base16-fish",
"rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561",
"type": "github"
}
},
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1752979451,
"narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "27cf1e66e50abc622fb76a3019012dc07c678fac",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-helix",
"type": "github"
}
},
"base16-vim": {
"flake": false,
"locked": {
"lastModified": 1732806396,
"narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=",
"owner": "tinted-theming",
"repo": "base16-vim",
"rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-vim",
"rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
"type": "github"
}
},
"bettersoundcloud": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1758915997,
"narHash": "sha256-alfX86Dk0NfhQu8PwonzKFxhA4XR40LoOhhdiIsFztc=",
"owner": "demenik",
"repo": "BetterSoundCloud-nix",
"rev": "c79babf9a51269b55924fdec69670ce76e0abcf3",
"type": "github"
},
"original": {
"owner": "demenik",
"repo": "BetterSoundCloud-nix",
"type": "github"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1744478979,
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
"type": "github"
},
"original": {
"owner": "lnl7",
"ref": "master",
"repo": "nix-darwin",
"type": "github"
}
},
"firefox-gnome-theme": {
"flake": false,
"locked": {
"lastModified": 1758112371,
"narHash": "sha256-lizRM2pj6PHrR25yimjyFn04OS4wcdbc38DCdBVa2rk=",
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"rev": "0909cfe4a2af8d358ad13b20246a350e14c2473d",
"type": "github"
},
"original": {
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1761588595,
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1763759067,
"narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1756770412,
"narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "4524271976b625a4a605beefd893f270620fd751",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_3"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_3": {
"inputs": {
"systems": "systems_6"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"fromYaml": {
"flake": false,
"locked": {
"lastModified": 1731966426,
"narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=",
"owner": "SenchoPens",
"repo": "fromYaml",
"rev": "106af9e2f715e2d828df706c386a685698f3223b",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "fromYaml",
"type": "github"
}
},
"gnome-shell": {
"flake": false,
"locked": {
"host": "gitlab.gnome.org",
"lastModified": 1762869044,
"narHash": "sha256-nwm/GJ2Syigf7VccLAZ66mFC8mZJFqpJmIxSGKl7+Ds=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "680e3d195a92203f28d4bf8c6e8bb537cc3ed4ad",
"type": "gitlab"
},
"original": {
"host": "gitlab.gnome.org",
"owner": "GNOME",
"ref": "gnome-49",
"repo": "gnome-shell",
"type": "gitlab"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1745494811,
"narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1763992752,
"narHash": "sha256-iinKiBTAx7F9EkMqKFSqaWTCaay463toAPtQiA8RRyc=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "55af952c5612190c3e7862f4e2504048c50841aa",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"ixx": {
"inputs": {
"flake-utils": [
"nixvim",
"nuschtosSearch",
"flake-utils"
],
"nixpkgs": [
"nixvim",
"nuschtosSearch",
"nixpkgs"
]
},
"locked": {
"lastModified": 1754860581,
"narHash": "sha256-EM0IE63OHxXCOpDHXaTyHIOk2cNvMCGPqLt/IdtVxgk=",
"owner": "NuschtOS",
"repo": "ixx",
"rev": "babfe85a876162c4acc9ab6fb4483df88fa1f281",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"ref": "v0.1.1",
"repo": "ixx",
"type": "github"
}
},
"mcmojave-cursors": {
"flake": false,
"locked": {
"lastModified": 1614124859,
"narHash": "sha256-4YqSucpxA7jsuJ9aADjJfKRPgPR89oq2l0T1N28+GV0=",
"owner": "vinceliuice",
"repo": "McMojave-cursors",
"rev": "7d0bfc1f91028191cdc220b87fd335a235ee4439",
"type": "github"
},
"original": {
"owner": "vinceliuice",
"repo": "McMojave-cursors",
"type": "github"
}
},
"nixos-wsl": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1763946063,
"narHash": "sha256-mxIPAXPmkf5aG7/pj59+82gvtgw2qi8pWIolMPTswu8=",
"owner": "nix-community",
"repo": "nixos-wsl",
"rev": "8d8506cea352fba187cfc748078e0c920c4e2129",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "main",
"repo": "nixos-wsl",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1763835633,
"narHash": "sha256-HzxeGVID5MChuCPESuC0dlQL1/scDKu+MmzoVBJxulM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "050e09e091117c3d7328c7b2b7b577492c43c134",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1763618868,
"narHash": "sha256-v5afmLjn/uyD9EQuPBn7nZuaZVV9r+JerayK/4wvdWA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "a8d610af3f1a5fb71e23e08434d8d61a466fc942",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixvim": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_2",
"nuschtosSearch": "nuschtosSearch",
"systems": "systems_4"
},
"locked": {
"lastModified": 1763984728,
"narHash": "sha256-i07UsSg+kedev5Bh/p/ERG1xrbRivOztih8laHZR6W8=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "3dc952d69cd38cdc3ad3ec7570fc4a1caed2bfea",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixvim",
"type": "github"
}
},
"nur": {
"inputs": {
"flake-parts": [
"stylix",
"flake-parts"
],
"nixpkgs": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1758998580,
"narHash": "sha256-VLx0z396gDCGSiowLMFz5XRO/XuNV+4EnDYjdJhHvUk=",
"owner": "nix-community",
"repo": "NUR",
"rev": "ba8d9c98f5f4630bcb0e815ab456afd90c930728",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"nuschtosSearch": {
"inputs": {
"flake-utils": "flake-utils_2",
"ixx": "ixx",
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1761730856,
"narHash": "sha256-t1i5p/vSWwueZSC0Z2BImxx3BjoUDNKyC2mk24krcMY=",
"owner": "NuschtOS",
"repo": "search",
"rev": "e29de6db0cb3182e9aee75a3b1fd1919d995d85b",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"repo": "search",
"type": "github"
}
},
"root": {
"inputs": {
"agenix": "agenix",
"bettersoundcloud": "bettersoundcloud",
"home-manager": "home-manager_2",
"mcmojave-cursors": "mcmojave-cursors",
"nixos-wsl": "nixos-wsl",
"nixpkgs": "nixpkgs",
"nixvim": "nixvim",
"spicetify-nix": "spicetify-nix",
"statusbar": "statusbar",
"stylix": "stylix"
}
},
"spicetify-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_5"
},
"locked": {
"lastModified": 1763985453,
"narHash": "sha256-vUqODgLIjeyHN7DP8dVx7oH9yB/L8qcxpN//4EmMQcM=",
"owner": "gerg-l",
"repo": "spicetify-nix",
"rev": "89cd40c646ec5b12e5c20c0e18f082e7629d4819",
"type": "github"
},
"original": {
"owner": "gerg-l",
"repo": "spicetify-nix",
"type": "github"
}
},
"statusbar": {
"inputs": {
"ags": "ags",
"flake-utils": "flake-utils_3",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1762946029,
"narHash": "sha256-GTYYOh/Bl++Ddi0g5y29Kne7g0LqemcfSkEfWGxrJo4=",
"owner": "demenik",
"repo": "statusbar",
"rev": "3256d7a50059c72599b4f6ca940bcf4054216263",
"type": "github"
},
"original": {
"owner": "demenik",
"repo": "statusbar",
"type": "github"
}
},
"stylix": {
"inputs": {
"base16": "base16",
"base16-fish": "base16-fish",
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts_2",
"gnome-shell": "gnome-shell",
"nixpkgs": [
"nixpkgs"
],
"nur": "nur",
"systems": "systems_7",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes",
"tinted-tmux": "tinted-tmux",
"tinted-zed": "tinted-zed"
},
"locked": {
"lastModified": 1763845141,
"narHash": "sha256-o8TKdZluj/yC8qPIVNe2g4qopyFmQglH52+lvQx82kE=",
"owner": "nix-community",
"repo": "stylix",
"rev": "adc650610085adbe130b9860d5bdb869f96050af",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "stylix",
"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"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_4": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_6": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_7": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tinted-foot": {
"flake": false,
"locked": {
"lastModified": 1726913040,
"narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
}
},
"tinted-kitty": {
"flake": false,
"locked": {
"lastModified": 1735730497,
"narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=",
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-kitty",
"type": "github"
}
},
"tinted-schemes": {
"flake": false,
"locked": {
"lastModified": 1757716333,
"narHash": "sha256-d4km8W7w2zCUEmPAPUoLk1NlYrGODuVa3P7St+UrqkM=",
"owner": "tinted-theming",
"repo": "schemes",
"rev": "317a5e10c35825a6c905d912e480dfe8e71c7559",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "schemes",
"type": "github"
}
},
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1757811970,
"narHash": "sha256-n5ZJgmzGZXOD9pZdAl1OnBu3PIqD+X3vEBUGbTi4JiI=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "d217ba31c846006e9e0ae70775b0ee0f00aa6b1e",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-tmux",
"type": "github"
}
},
"tinted-zed": {
"flake": false,
"locked": {
"lastModified": 1757811247,
"narHash": "sha256-4EFOUyLj85NRL3OacHoLGEo0wjiRJzfsXtR4CZWAn6w=",
"owner": "tinted-theming",
"repo": "base16-zed",
"rev": "824fe0aacf82b3c26690d14e8d2cedd56e18404e",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-zed",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

151
flake.nix Normal file
View File

@@ -0,0 +1,151 @@
{
description = "demenik's dots";
nixConfig.experimentalFeatures = ["nix-command" "flakes"];
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-wsl = {
url = "github:nix-community/nixos-wsl/main";
inputs.nixpkgs.follows = "nixpkgs";
};
agenix = {
url = "github:ryantm/agenix";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:nix-community/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
nixvim.url = "github:nix-community/nixvim";
spicetify-nix = {
url = "github:gerg-l/spicetify-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
mcmojave-cursors = {
url = "github:vinceliuice/McMojave-cursors";
flake = false;
};
bettersoundcloud = {
url = "github:demenik/BetterSoundCloud-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
statusbar = {
url = "github:demenik/statusbar";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
nixpkgs,
home-manager,
agenix,
stylix,
nixos-wsl,
statusbar,
...
} @ inputs: {
nixosConfigurations = let
mkNixConfig = {
hostName,
system ? "x86_64-linux",
user ? "demenik",
stateVersion ? "25.05",
dotsDir ? "/home/${user}/dots",
nixOsModules ? [],
hmModules ? [],
}: let
specialArgs = {inherit inputs stateVersion user dotsDir;};
in
nixpkgs.lib.nixosSystem {
inherit system specialArgs;
modules =
[
{
networking.hostName = hostName;
}
home-manager.nixosModules.home-manager
{
home-manager = {
# useGlobalPkgs = true;
backupFileExtension = "backup";
users."${user}".imports = hmModules;
extraSpecialArgs = specialArgs;
};
}
]
++ nixOsModules;
};
in {
thinkpad = mkNixConfig {
hostName = "thinkpad";
nixOsModules = [
./hosts/thinkpad.nix
./nixos/full.nix
statusbar.nixosModules.default
];
hmModules = [
./home/demenik.nix
agenix.homeManagerModules.default
./secrets
stylix.homeModules.stylix
./home/stylix
];
};
wsl = mkNixConfig rec {
hostName = "wsl";
nixOsModules = [
./hosts/wsl.nix
./nixos/headless.nix
nixos-wsl.nixosModules.default
<nixos-wsl/modules>
];
hmModules = [
./home/headless.nix
];
};
};
homeConfigurations = let
mkHomeConfig = {
system ? "x86_64-linux",
user ? "demenik",
stateVersion ? "25.05",
dotsDir ? "/home/${user}/dots",
modules ? [],
}:
home-manager.lib.homeManagerConfiguration {
pkgs = import nixpkgs {inherit system;};
inherit modules;
extraSpecialArgs = {inherit inputs stateVersion user dotsDir;};
};
in {
"nix@homelab" = mkHomeConfig {
user = "nix";
dotsDir = "/home/homelab-dots";
modules = [
./home/headless.nix
];
};
"db56@wsl50" = mkHomeConfig {
user = "db56";
modules = [
./home/headless.nix
];
};
};
};
}

View File

@@ -0,0 +1,5 @@
{
imports = [
./mail.nix
];
}

135
home/accounts/mail.nix Normal file
View File

@@ -0,0 +1,135 @@
{
lib,
pkgs,
...
}: {
home.packages = with pkgs; [
pass
];
accounts.email.accounts = let
getPass = address: "${lib.getExe pkgs.pass} show ${address}";
in {
"iCloud" = rec {
primary = true;
address = "dominik.bernroider@icloud.com";
userName = address;
realName = "Dominik Bernroider";
passwordCommand = getPass address;
imap = {
host = "imap.mail.me.com";
port = 993;
tls.enable = true;
};
smtp = {
host = "smtp.mail.me.com";
port = 587;
tls = {
enable = true;
useStartTls = true;
};
};
thunderbird.enable = true;
};
"Gmail" = rec {
address = "domerepu@gmail.com";
userName = address;
realName = "Dominik Bernroider";
flavor = "gmail.com";
passwordCommand = getPass address;
imap = {
host = "imap.gmail.com";
port = 993;
tls.enable = true;
};
smtp = {
host = "smtp.gmail.com";
port = 465;
tls.enable = true;
};
thunderbird.enable = true;
};
"Uni-Ulm" = rec {
address = "dominik.bernroider@uni-ulm.de";
userName = "tct47";
realName = "Dominik Bernroider";
passwordCommand = getPass address;
imap = {
host = "imap.uni-ulm.de";
port = 993;
tls.enable = true;
};
smtp = {
host = "mail.uni-ulm.de";
port = 587;
tls = {
enable = true;
useStartTls = true;
};
};
thunderbird.enable = true;
};
"Self-hosted" = rec {
address = "mail@demenik.tech";
userName = address;
realName = "Dominik Bernroider";
passwordCommand = getPass address;
imap = {
host = "mail.demenik.tech";
port = 993;
tls.enable = true;
};
smtp = {
host = "mail.demenik.tech";
port = 587;
tls = {
enable = true;
useStartTls = true;
};
};
thunderbird.enable = true;
};
"Alte Gmail" = rec {
address = "domemc.netzwerk@gmail.com";
flavor = "gmail.com";
userName = address;
realName = "Dominik Bernroider";
passwordCommand = getPass address;
imap = {
host = "imap.gmail.com";
port = 993;
tls.enable = true;
};
smtp = {
host = "smtp.gmail.com";
port = 465;
tls.enable = true;
};
thunderbird.enable = true;
};
};
}

33
home/demenik.nix Normal file
View File

@@ -0,0 +1,33 @@
{pkgs, ...}: {
imports = [
./global.nix
./xdg-desktop.nix
./accounts
./desktops/hyprland
./services/kanshi.nix
./services/bisync.nix
./shells/zsh
./terminals/kitty
./programs
./editors/nvim
./editors/intellij.nix
./editors/cursor.nix
];
home.file.".face" = {
source = pkgs.fetchurl {
url = "https://github.com/demenik.png";
hash = "sha256-+1ugmn5qeAvijj5Lm3Ye0rW9UEF9OCGxiSMfZKVjxI4=";
};
};
home.packages = with pkgs; [
mpvpaper
];
services.swww.enable = true;
}

21
home/desktops/global.nix Normal file
View File

@@ -0,0 +1,21 @@
{
pkgs,
inputs,
...
}: {
home = {
sessionVariables = {
GTK_USE_PORTAL = "1";
NIXOS_OZONE_WL = "1";
QT_SCALE_FACTOR = "1";
DISABLE_QT5_COMPAT = "0";
_JAVA_AWT_WM_NONREPARENTING = "1";
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
};
};
qt = {
enable = true;
platformTheme.name = "qtct";
};
}

View File

@@ -0,0 +1,2 @@
[
]

View File

@@ -0,0 +1,5 @@
# hyprlang
''
bind = SUPER, b, exec, [workspace 2] firefox
bind = SUPER, Return, exec, kitty-cwd
''

View File

@@ -0,0 +1,57 @@
{pkgs, ...}: {
wayland.windowManager.hyprland = {
settings = {
bind = let
numbers = [1 2 3 4 5 6 7 8 9];
workspace = num: "SUPER, ${toString num}, workspace, ${toString num}";
move-to-workspace = num: "SUPER SHIFT, ${toString num}, movetoworkspace, ${toString num}";
in
[
"SUPER SHIFT, q, exit"
"SUPER, x, killactive"
"SUPER, t, togglefloating"
"SUPER SHIFT, p, pin"
"SUPER, f, fullscreen, 0"
"SUPER, m, fullscreen, 1"
"SUPER SHIFT, f, fullscreenstate, -1 2"
"SUPER, 0, workspace, 10"
"SUPER SHIFT, 0, movetoworkspace, 10"
]
++ map move-to-workspace numbers
++ map workspace numbers;
bindm = [
"SUPER, mouse:272, movewindow"
"SUPER, mouse:273, resizewindow"
];
binde = let
volume-value = 5;
brightness-value = 5;
volume-cmd = "wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ ${toString volume-value}%";
in [
",XF86MonBrightnessUp, exec, light -A ${toString brightness-value}"
",XF86MonBrightnessDown, exec, light -U ${toString brightness-value}"
# TODO: these dont work on the ThinkPad
",XF86AudioRaiseVolume, exec, ${volume-cmd}+"
",XF86AudioLowerVolume, exec, ${volume-cmd}-"
",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
];
bindl = [
",XF86AudioPlay, exec, playerctl play-pause"
",XF86AudioNext, exec, playerctl next"
",XF86AudioPrev, exec, playerctl previous"
];
};
extraConfig = import ./vim-binds.nix + import ./app-binds.nix;
};
services.playerctld.enable = true;
home.packages = with pkgs; [light];
}

View File

@@ -0,0 +1,27 @@
# hyprlang
''
bind = SUPER, h, bringactivetotop
bind = SUPER, j, bringactivetotop
bind = SUPER, k, bringactivetotop
bind = SUPER, l, bringactivetotop
bind = SUPER, h, movefocus, l
bind = SUPER, j, movefocus, d
bind = SUPER, k, movefocus, u
bind = SUPER, l, movefocus, r
bind = SUPER ALT, h, swapwindow, l
bind = SUPER ALT, j, swapwindow, d
bind = SUPER ALT, k, swapwindow, u
bind = SUPER ALT, l, swapwindow, r
bind = SUPER CTRL, h, moveactive, l
bind = SUPER CTRL, j, moveactive, d
bind = SUPER CTRL, k, moveactive, u
bind = SUPER CTRL, l, moveactive, r
bind = SUPER SHIFT, h, resizeactive, -20 0
bind = SUPER SHIFT, j, resizeactive, 0 20
bind = SUPER SHIFT, k, resizeactive, 0 -20
bind = SUPER SHIFT, l, resizeactive, 20 0
''

View File

@@ -0,0 +1,75 @@
{pkgs, ...}: {
imports = [
../global.nix
../wayland.nix
./binds
./hyprlock.nix
./dunst.nix
];
home.packages = with pkgs; [
hyprland
hyprshade
xdg-desktop-portal-hyprland
xdg-desktop-portal-gtk
];
wayland.windowManager.hyprland = {
enable = true;
systemd.enable = true;
xwayland.enable = true;
settings = let
rules = import ./rules.nix;
in {
monitor = [",preferred,auto,1"];
misc.disable_hyprland_logo = true;
misc.focus_on_activate = true;
xwayland.force_zero_scaling = true;
layerrule = rules.layer;
windowrulev2 = rules.window;
inherit (rules) workspace;
input = {
kb_layout = "de";
kb_variant = "nodeadkeys";
repeat_delay = 300;
touchpad = {
natural_scroll = true;
clickfinger_behavior = true;
disable_while_typing = false;
};
};
general = {
gaps_in = 5;
gaps_out = 5;
border_size = 2;
layout = "master";
};
decoration = {
rounding = 8;
blur = {
size = 4;
passes = 3;
};
dim_around = 0.6;
};
animation = import ./animations.nix;
};
};
services.hypridle = import ./hypridle.nix;
home.sessionVariables = {
XDG_SESSION_DESKTOP = "Hyprland";
XDG_CURRENT_DESKTOP = "Hyprland";
};
}

View File

@@ -0,0 +1,45 @@
{config, ...}: {
services.dunst = {
enable = true;
iconTheme = {
name = config.stylix.icons.dark;
inherit (config.stylix.icons) package;
};
settings = let
inherit (config.lib.stylix) colors;
in {
global = {
width = 400;
offset = "5x5";
corner_radius = 4;
progress_bar_min_width = 380;
progress_bar_max_width = 380;
progress_bar_corner_radius = 8;
padding = 10;
horizontal_padding = 10;
frame_width = 1;
gap_size = 3;
};
urgency_low = {
format = "<b><span>%s</span></b>\n%b";
};
urgency_normal = {
highlight = colors.base0A;
default_icon = "dialog-information";
format = "<b><span>%s</span></b>\n%b";
};
urgency_critical = {
highlight = colors.base08;
default_icon = "dialog-error";
format = "<b><span>%s</span></b>\n%b";
};
};
};
}

View File

@@ -0,0 +1,32 @@
{
enable = true;
settings = {
general = {
lock_cmd = "pidof hyprlock || hyprlock";
before_sleep_cmd = "hyprlock";
after_sleep_cmd = "hyprctl dispatch dpms on";
};
listener = [
{
timeout = 300; # 5min
on-timeout = "light -S 10";
on-resume = "brightnessctl -r";
}
{
timeout = 150; # 2.5min
on-timeout = "brightnessctl -sd rgb:kbd_backlight set 0";
on-resume = "brightnessctl -rd rgb:kbd_backlight";
}
{
timeout = 600; # 10min
on-timeout = "hyprlock";
}
{
timeout = 900; # 15min
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
];
};
}

View File

@@ -0,0 +1,107 @@
{
config,
lib,
...
}: {
programs.hyprlock = {
enable = true;
settings = let
profilePhoto = "$HOME/Pictures/pfp/bladee/egobaby.jpg";
wallpaper = "$HOME/Pictures/wallpapers/takopi/class.png";
font_family = config.stylix.fonts.sansSerif.name;
inherit (config.lib.stylix) colors;
text = colors.base05;
yellow = colors.base0A;
accent = colors.base0D;
in {
authentication.fingerprint.enabled = true;
background = {
monitor = "";
path = wallpaper;
blur_passes = 0;
blur_size = 8;
};
general = {
hide_cursor = true;
ignore_empty_input = true;
};
input-field = {
monitor = "";
size = "250, 60";
position = "0, -225";
outline_thickness = 2;
dots_size = 0.2;
dots_spacing = 0.2;
dots_center = true;
outer_color = lib.mkForce "rgba(0, 0, 0, 0)";
inner_color = lib.mkForce "rgba(100, 114, 125, 0.4)";
font_color = lib.mkForce "rgb(${text})";
fade_on_empty = false;
inherit font_family;
placeholder_text = "<span foreground=\"##${text}99\"><i>󰌾 Login as </i><span foreground=\"##${accent}ff\">$USER</span></span>";
fail_text = "<i>$FAIL <b>($ATTEMPTS)</b></i>";
capslock_color = "rgb(${yellow})";
check_color = lib.mkForce "rgb(${accent})";
};
label = [
# Layout
{
monitor = "";
text = "Layout: $LAYOUT";
color = "#rgb(${text})";
font_size = 12;
inherit font_family;
position = "30, -30";
halign = "left";
valign = "top";
}
# Time
{
monitor = "";
text = "cmd[update:1000] echo \"$(date +\"%H:%M\")\"";
color = "rgb(${text})";
font_size = 130;
inherit font_family;
position = "0, 240";
}
# Day-Month
{
monitor = "";
text = "cmd[update:43200000] echo -e \"$(date +\"%A, %d. %B %Y\")\"";
color = "rgb(${text})";
font_size = 30;
inherit font_family;
position = "0, 105";
}
# Fingerprint
{
monitor = "";
text = "$FPRINTPROMPT";
color = "rgb(${text})";
font_size = 14;
inherit font_family;
position = "0, -130";
}
];
# image = [
# # Profile Photo
# {
# monitor = "";
# path = profilePhoto;
# border_size = 0;
# size = 120;
# rounding = -1;
# rotate = 0;
# position = "0, -20";
# }
# ];
};
};
}

View File

@@ -0,0 +1,18 @@
{
layer = [];
window =
[
"float, class:^(hyprland-share-picker)$"
"workspace 3, class:^(Electron)$, title:^(BSC)$" # BetterSoundCloud
"workspace 3, class:^(opensoundcloud)$"
]
++ map (rule: "${rule}, class:^(xdg-desktop-portal-gtk)$") [
"float"
"size 800 600"
"center 1"
"dimaround"
];
workspace = [];
}

22
home/desktops/wayland.nix Normal file
View File

@@ -0,0 +1,22 @@
{pkgs, ...}: {
imports = [
./global.nix
];
home = {
packages = with pkgs; [
wl-clipboard
];
sessionVariables = {
GDK_BACKEND = "wayland";
QT_QPA_PLATFORM = "wayland";
CLUTTER_BACKEND = "wayland";
SDL_VIDEODRIVER = "wayland";
XDG_SESSION_TYPE = "wayland";
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
};
};
services.clipman.enable = true;
}

3
home/editors/cursor.nix Normal file
View File

@@ -0,0 +1,3 @@
{pkgs, ...}: {
home.packages = with pkgs; [code-cursor-fhs];
}

View File

@@ -0,0 +1,5 @@
{pkgs, ...}: {
home.packages = with pkgs; [
jetbrains.idea-community
];
}

View File

@@ -0,0 +1,32 @@
{
programs.nixvim = {
colorscheme = "catppuccin";
colorschemes.catppuccin = {
enable = true;
settings = {
flavour = "mocha";
transparent_background = true;
integrations = {
cmp = true;
gitsigns = true;
mini = {
enable = true;
indentscope_color = "lavender";
};
nvimtree = true;
treesitter = true;
alpha = true;
fzf = true;
grug_far = true;
harpoon = true;
markdown = true;
noice = true;
copilot_vim = true;
lsp_trouble = true;
which_key = true;
};
};
};
};
}

View File

@@ -0,0 +1,47 @@
{inputs, ...}: {
imports = [
inputs.nixvim.homeModules.nixvim
./plugins
./colorschemes.nix
];
programs.nixvim = {
enable = true;
defaultEditor = true;
globals.mapleader = " ";
clipboard.register = "unnamedplus";
luaLoader.enable = true;
opts = import ./options.nix;
keymaps = import ./keymaps.nix;
extraConfigLua =
# lua
''
-- Disable netrw
g.loaded_netrw = 1
g.loaded_netrwPlugin = 1
-- Hide line numbers in terminal mode
vim.cmd [[ autocmd TermOpen * setlocal nonumber norelativenumber ]]
-- Disable arrow keys
-- vim.cmd [[ :map <Up> <Nop> ]]
-- vim.cmd [[ :map <Left> <Nop> ]]
-- vim.cmd [[ :map <Right> <Nop> ]]
-- vim.cmd [[ :map <Down> <Nop> ]]
-- Enable diagnostics virtual text
vim.diagnostic.config({ virtual_text = true })
-- Add filetypes
vim.filetype.add({
pattern = {
[".*%.arb"] = "json",
["%.sqruff"] = "toml",
},
})
'';
};
}

View File

@@ -0,0 +1,43 @@
let
toggle = key: action: {
key = "\\${key}";
options.desc = "Toggle ${action}";
action = "<cmd>setlocal ${action}!<cr>";
};
window-jump = key: {
key = "<c-${key}>";
action = "<c-w>${key}";
};
in
[
{
key = "<S-u>";
options.desc = "Redo";
action = "<C-r>";
}
{
key = "<c-c>";
options.desc = "Comment line";
action = "<cmd>normal gcc<cr>";
}
(toggle "w" "wrap")
(toggle "n" "number")
(toggle "r" "relativenumber")
(toggle "i" "ignorecase")
(toggle "c" "cursorline")
(toggle "C" "cursorcolumn")
{
key = "<s-h>";
options.desc = "Previous buffer";
action = "<cmd>bprevious<cr>";
}
{
key = "<s-l>";
options.desc = "Next Buffer";
action = "<cmd>bnext<cr>";
}
]
++ map window-jump ["h" "j" "k" "l"]

View File

@@ -0,0 +1,38 @@
{
# General
undofile = true;
backup = false;
writebackup = false;
mouse = "a";
# Appearance
breakindent = true;
cursorline = false;
linebreak = true;
number = true;
relativenumber = true;
# Editing
ignorecase = true;
incsearch = true;
infercase = true;
smartcase = true;
smartindent = true;
hidden = true;
title = true;
tabstop = 2;
scrolloff = 8;
shiftwidth = 2;
numberwidth = 4;
showcmd = true;
hlsearch = true;
swapfile = false;
expandtab = true;
updatetime = 100;
timeoutlen = 1000;
sidescrolloff = 8;
termguicolors = true;
splitkeep = "screen";
fileencoding = "utf-8";
}

View File

@@ -0,0 +1,56 @@
pkgs: let
build = {
version,
owner,
name,
rev,
hash,
}:
pkgs.vimUtils.buildVimPlugin {
pname = name;
inherit version;
src = pkgs.fetchFromGitHub {
repo = name;
inherit owner rev;
sha256 = hash;
};
};
in {
# INFO: Last update: 18. Aug. 2025 | Sort latest -> oldest
# https://github.com/SCJangra/table-nvim
table-nvim = build {
version = "27-09-2024";
owner = "SCJangra";
name = "table-nvim";
rev = "c044fd37169eb10376962b0d0cec5f94d58ca626";
hash = "1ygn4bvnpbd49gcgbkh0cdj3p75jsmwi87hby78w0fd22205pvmi";
};
# https://github.com/michaelrommel/nvim-silicon
silicon = build {
version = "09-01-2025";
owner = "michaelrommel";
name = "nvim-silicon";
rev = "7f66bda8f60c97a5bf4b37e5b8acb0e829ae3c32";
hash = "1zk6lgghvdcys20cqvh2g1kjf661q1w97niq5nx1zz4yppy2f9jy";
};
# https://github.com/b0o/incline.nvim
incline = build {
version = "05-06-2025";
owner = "b0o";
name = "incline.nvim";
rev = "0fd2d5a27504dba7fdc507a53275f22c081fe640";
hash = "19x35z2sj3hl3icrxzbs67xhxgq9d237vhgzqrz8ppdc74p8wgaz";
};
# https://github.com/Aasim-A/scrollEOF.nvim
scrollEOF = build {
version = "31-05-2025";
owner = "Aasim-A";
name = "scrollEOF.nvim";
rev = "2575109749b4bf3a0bf979a17947b3c1e8c5137e";
hash = "1s66v9n0arg81wgw1z8iv9s304j78cd506z522avpc88d3ji4yl4";
};
}

View File

@@ -0,0 +1,257 @@
{lib, ...}: {
plugins = {
cmp = {
enable = true;
autoEnableSources = true;
settings = {
experimental.ghost_text = true;
mapping.__raw = ''
cmp.mapping.preset.insert({
["<C-j>"] = cmp.mapping.scroll_docs(4),
["<C-k>"] = cmp.mapping.scroll_docs(-4),
["<CR>"] = cmp.mapping.confirm({
behavior = cmp.ConfirmBehavior.Replace,
select = true
}),
["<Tab>"] = cmp.mapping(function(fallback)
local luasnip = require("luasnip")
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.locally_jumpable(1) then
luasnip.jump(1)
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
local luasnip = require("luasnip")
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
})
'';
window = {
completion = {
winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None";
col_offset = -3;
side_padding = 0;
};
documentation = {
winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None";
col_offset = -3;
side_padding = 0;
};
};
snippet.expand =
# lua
''
function(args)
require'luasnip'.lsp_expand(args.body)
end
'';
formatting = {
# expandable_indicator = true;
fields = ["kind" "abbr" "menu"];
format =
lib.mkForce
# lua
''
function(entry, vim_item)
local kind = require("lspkind").cmp_format({ mode = "symbol_text", maxwidth = 50 })(entry, vim_item)
local strings = vim.split(kind.kind, "%s", { trimempty = true })
kind.kind = " " .. (strings[1] or "") .. " "
kind.menu = " (" .. (strings[2] or "") .. ")"
return kind
end
'';
};
completion.completeopt = "menu,menuone,preview,noinsert";
sources = [
{name = "nvim_lsp";}
{name = "buffer";}
{name = "path";}
{name = "luasnip";}
];
};
cmdline = {
"/" = {
mapping.__raw = "cmp.mapping.preset.cmdline()";
sources = [{name = "buffer";}];
};
":" = {
mapping.__raw = "cmp.mapping.preset.cmdline()";
sources = [
{
name = "path";
}
{
name = "cmdline";
option.ignore_cmds = ["Man" "!"];
}
];
};
};
};
cmp-nvim-lsp.enable = true;
cmp-buffer.enable = true;
cmp-path.enable = true;
cmp-cmdline.enable = true;
cmp_luasnip.enable = true;
};
# TODO: fix (https://github.com/hrsh7th/nvim-cmp/wiki/Menu-Appearance#how-to-get-types-on-the-left-and-offset-the-menu)
highlight = {
PmenuSel = {
bg = "#282C34";
fg = "NONE";
};
Pmenu = {
fg = "#C5CDD9";
bg = "#22252A";
};
CmpItemAbbrDeprecated = {
fg = "#7E8294";
bg = "NONE";
strikethrough = true;
};
CmpItemAbbrMatch = {
fg = "#82AAFF";
bg = "NONE";
bold = true;
};
CmpItemAbbrMatchFuzzy = {
fg = "#82AAFF";
bg = "NONE";
bold = true;
};
CmpItemMenu = {
fg = "#C792EA";
bg = "NONE";
italic = true;
};
CmpItemKindField = {
fg = "#EED8DA";
bg = "#B5585F";
};
CmpItemKindProperty = {
fg = "#EED8DA";
bg = "#B5585F";
};
CmpItemKindEvent = {
fg = "#EED8DA";
bg = "#B5585F";
};
CmpItemKindText = {
fg = "#C3E88D";
bg = "#9FBD73";
};
CmpItemKindEnum = {
fg = "#C3E88D";
bg = "#9FBD73";
};
CmpItemKindKeyword = {
fg = "#C3E88D";
bg = "#9FBD73";
};
CmpItemKindConstant = {
fg = "#FFE082";
bg = "#D4BB6C";
};
CmpItemKindConstructor = {
fg = "#FFE082";
bg = "#D4BB6C";
};
CmpItemKindReference = {
fg = "#FFE082";
bg = "#D4BB6C";
};
CmpItemKindFunction = {
fg = "#EADFF0";
bg = "#A377BF";
};
CmpItemKindStruct = {
fg = "#EADFF0";
bg = "#A377BF";
};
CmpItemKindClass = {
fg = "#EADFF0";
bg = "#A377BF";
};
CmpItemKindModule = {
fg = "#EADFF0";
bg = "#A377BF";
};
CmpItemKindOperator = {
fg = "#EADFF0";
bg = "#A377BF";
};
CmpItemKindVariable = {
fg = "#C5CDD9";
bg = "#7E8294";
};
CmpItemKindFile = {
fg = "#C5CDD9";
bg = "#7E8294";
};
CmpItemKindUnit = {
fg = "#F5EBD9";
bg = "#D4A959";
};
CmpItemKindSnippet = {
fg = "#F5EBD9";
bg = "#D4A959";
};
CmpItemKindFolder = {
fg = "#F5EBD9";
bg = "#D4A959";
};
CmpItemKindMethod = {
fg = "#DDE5F5";
bg = "#6C8ED4";
};
CmpItemKindValue = {
fg = "#DDE5F5";
bg = "#6C8ED4";
};
CmpItemKindEnumMember = {
fg = "#DDE5F5";
bg = "#6C8ED4";
};
CmpItemKindInterface = {
fg = "#D8EEEB";
bg = "#58B5A8";
};
CmpItemKindColor = {
fg = "#D8EEEB";
bg = "#58B5A8";
};
CmpItemKindTypeParameter = {
fg = "#D8EEEB";
bg = "#58B5A8";
};
};
}

View File

@@ -0,0 +1,33 @@
{
enable = true;
settings = {
panel.enabled = false;
suggestion = {
autoTrigger = true;
keymap = {
accept = "<M-l>";
next = "<M-]>";
prev = "<M-[>";
dismiss = "<C-]>";
};
};
filetypes = {
yaml = true;
markdown = true;
javascript = true;
typescript = true;
help = false;
gitcommit = false;
gitrebase = false;
hgcommit = false;
svn = false;
cvs = false;
"." = false;
};
};
}

View File

@@ -0,0 +1,10 @@
{
imports = [
./cmp.nix
];
plugins = {
emmet.enable = true;
# copilot-lua = import ./copilot.nix;
};
}

View File

@@ -0,0 +1,10 @@
require("incline").setup {}
-- vim_current_word
vim.cmd [[
hi CurrentWord guifg=#cba6f7
let g:vim_current_word#hightlight_twins = 0
let g:vim_current_word#excluded_filetypes = ["minifiles", "netrw", "alpha"]
]]
local g = vim.g

View File

@@ -0,0 +1,17 @@
{pkgs, ...}: {
extraPlugins = let
builds = import ../builds.nix pkgs;
in
with builds;
with pkgs.vimPlugins; [
incline
scrollEOF
vim-hexokinase
vim_current_word
];
plugins.noice.enable = true;
extraConfigLua = builtins.readFile ./config.lua;
}

View File

@@ -0,0 +1,26 @@
{pkgs, ...}: {
imports = [
./lsp
];
programs.nixvim = {
# TODO: make these hm level
imports = [
./cmp
./decoration
./editing
./formatting
./git
./lang
./snippet
./treesitter
./utils
];
plugins.mini.enable = true;
plugins.web-devicons.enable = true;
extraPlugins = with pkgs.vimPlugins; [plenary-nvim dressing-nvim];
};
}

View File

@@ -0,0 +1,38 @@
{
plugins = {
nvim-autopairs = {
enable = true;
settings = {
mapBs = false;
checkTs = true;
tsConfig = {
lua = ["string" "source"];
javascript = ["string" "template_string"];
};
disabledFiletypes = ["minifiles"];
};
};
mini = {
modules = {
move = {};
splitjoin = {};
# surround = {};
trailspace = {};
};
};
rainbow-delimiters.enable = true;
twilight.enable = true;
zen-mode.enable = true;
nvim-tree = {
enable = true;
settings = {
renderer = {
group_empty = true;
};
};
};
};
}

View File

@@ -0,0 +1,128 @@
{pkgs, ...}: {
extraPackages = with pkgs; [
shfmt
shellcheck
stylua
alejandra
prettier
prettierd
sqruff
yamlfmt
black
go
gotools
google-java-format
ktlint
rustfmt
clang-tools
cmake-format
kdePackages.qtdeclarative # qmlformat
];
plugins.conform-nvim = {
enable = true;
settings = {
notifyOnError = true;
formatters_by_ft = let
prettier = {
__unkeyed-1 = "prettierd";
__unkeyed-2 = "prettier";
timeout_ms = 2000;
stop_after_first = true;
};
in {
sh = ["shellcheck" "shfmt"];
lua = ["stylua"];
nix = ["alejandra"];
html = prettier;
css = prettier;
javascript = prettier;
typescript = prettier;
javascriptreact = prettier;
typescriptreact = prettier;
sql = ["sqruff"];
json = prettier;
yaml = ["yamlfmt"];
python = ["black"];
go = ["goimports" "gofmt"];
java = ["google-java-format"];
kotlin = ["ktlint"];
rust = ["rustfmt"];
c = ["clang_format"];
cmake = ["cmake_format"];
cpp = ["clang_format"];
qml = ["qmlformat"];
qmljs = ["qmlformat"];
"_" = ["trim_whitespace" "trim_newlines"];
};
formatters = {
prettier = {
command = "prettier";
prepend_args = ["-w"];
};
prettierd = {
command = "prettierd";
prepend_args = ["-w"];
};
};
format_on_save =
# lua
''
function(bufnr)
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
return
end
if vim.g.slow_format_filetypes[vim.bo[bufnr].filetype] then
return
end
local function on_format(err)
if err and err:match("timeout$") then
slow_format_filetypes[vim.bo[bufnr].filetype] = true
end
end
return { timeout_ms = 200, lsp_fallback = true }, on_format
end
'';
format_after_save =
# lua
''
function (bufnr)
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
return
end
if not vim.g.slow_format_filetypes[vim.bo[bufnr].filetype] then
return
end
return { lsp_fallback = true }
end
'';
};
};
extraConfigLua = ''
vim.g.slow_format_filetypes = {};
'';
}

View File

@@ -0,0 +1,32 @@
{
imports = [./conform.nix];
plugins.mini = {
modules = {
align = {};
indentscope = {
symbol = "";
draw.delay = 0;
options.try_as_border = true;
};
};
};
extraConfigLua =
# lua
''
vim.api.nvim_create_autocmd("FileType", {
desc = "Disable indentscope for certain filetypes",
pattern = {
"alpha",
"help",
"NvimTree",
"toggleterm",
"Trouble",
},
callback = function()
vim.b.miniindentscope_disable = true
end,
})
'';
}

View File

@@ -0,0 +1,14 @@
{
plugins = {
fugitive.enable = true;
diffview.enable = true;
gitmessenger = {
enable = true;
settings = {
include_diff = "current";
no_default_mappings = true;
};
};
gitsigns = import ./gitsigns.nix;
};
}

View File

@@ -0,0 +1,23 @@
{
enable = true;
settings = {
numhl = true;
current_line_blame = true;
signs = {
add.text = "";
change.text = "";
delete.text = "";
topdelete.text = "";
changedelete.text = "";
untracked.text = "";
};
signs_staged = {
add.text = "";
change.text = "";
delete.text = "";
topdelete.text = "";
changedelete.text = "";
};
};
}

View File

@@ -0,0 +1,8 @@
{
imports = [
./docs
./flutter.nix
./tailwind.nix
./rust.nix
];
}

View File

@@ -0,0 +1,6 @@
{
imports = [
./latex.nix
./markdown.nix
];
}

View File

@@ -0,0 +1,22 @@
{pkgs, ...}: {
extraPackages = with pkgs; [sioyek tectonic];
plugins.vimtex.enable = true;
extraConfigLua = ''
vim.g["vimtex_view_method"] = "sioyek"
vim.g["vimtex_quickfix_mode"] = 0 -- supress error reporting on save and build
vim.g["vimtex_mappings_enable"] = 0 -- ignore mappings
vim.g["vimtex_indent_enabled"] = 0 -- auto indent
vim.g["tex_flavor"] = "latex" -- how to read tex files
vim.g["tex_indent_items"] = 0 -- turn off enumerate indent
vim.g["tex_indent_brace"] = 0 -- turn off brace indent
vim.g["vimtex_compiler_method"] = "tectonic" -- tex compiler
vim.g["vimtex_log_ignore"] = ({ -- Error supression:
"Underfull",
"Overfull",
"specifier changed to",
"Token not allowed in a PDF string",
})
'';
}

View File

@@ -0,0 +1,23 @@
{pkgs, ...}: {
plugins = {
markdown-preview = {
enable = true;
settings = {
auto_close = 0;
browser = "firefox";
page_title = "Markdown Preview";
};
};
render-markdown = {
enable = true;
settings = {
pipe_table.border = ["" "" "" "" "" "" "" "" "" "" ""];
};
};
};
extraPlugins = let
builds = import ../../builds.nix pkgs;
in [builds.table-nvim];
}

View File

@@ -0,0 +1,3 @@
{
plugins.flutter-tools.enable = true;
}

View File

@@ -0,0 +1,23 @@
{pkgs, ...}: {
plugins = {
crates.enable = true;
rustaceanvim = {
enable = false;
settings = {
server.cmd = ["rust-analyzer"];
dap.adapter.__raw = let
codelldb = pkgs.vscode-extensions.vadimcn.vscode-lldb;
extensionPath = "${codelldb}/share/vscode/extensions/vadimcn.vscode-lldb";
codelldbPath = "${extensionPath}/adapter/codelldb";
liblldbPath = "${extensionPath}/lldb/lib/liblldb.so";
in ''
require("rustaceanvim.config").get_codelldb_adapter(
"${codelldbPath}",
"${liblldbPath}"
)
'';
};
};
};
}

View File

@@ -0,0 +1,3 @@
{
plugins.tailwind-tools.enable = true;
}

View File

@@ -0,0 +1,31 @@
{
imports = [./servers.nix ./lint.nix];
programs.nixvim = {
plugins = {
lspkind = import ./lspkind.nix;
lspconfig.enable = true;
trouble.enable = true;
};
keymaps = let
trouble-lsp = key: action: {
mode = "";
inherit key;
options.desc = action;
action = "<cmd>Trouble lsp_${action}<cr>";
};
in [
{
mode = "";
key = "K";
options.desc = "Hover";
action = "<cmd>Lspsaga hover_doc<cr>";
}
(trouble-lsp "gd" "definitions")
(trouble-lsp "gr" "references")
(trouble-lsp "gi" "implementations")
];
};
}

View File

@@ -0,0 +1,93 @@
{
stdenv,
lib,
fetchzip,
makeWrapper,
unzip,
jdk17_headless,
}:
stdenv.mkDerivation rec {
pname = "kotlin-lsp";
version = "0.253.10629";
src = fetchzip {
url = "https://download-cdn.jetbrains.com/kotlin-lsp/${version}/kotlin-${version}.zip";
hash = "sha256-LCLGo3Q8/4TYI7z50UdXAbtPNgzFYtmUY/kzo2JCln0=";
stripRoot = false;
};
nativeBuildInputs = [
makeWrapper
unzip
];
installPhase = ''
runHook preInstall
mkdir -p $out/bin $out/libexec/kotlin-lsp
cp -r $src/* $out/libexec/kotlin-lsp/
makeWrapper ${jdk17_headless}/bin/java $out/bin/kotlin-lsp \
--add-flags "--add-opens java.base/java.io=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.lang=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.lang.ref=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.lang.reflect=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.net=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.nio=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.nio.charset=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.text=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.time=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.util=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.util.concurrent=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.util.concurrent.locks=ALL-UNNAMED" \
--add-flags "--add-opens java.base/jdk.internal.vm=ALL-UNNAMED" \
--add-flags "--add-opens java.base/sun.net.dns=ALL-UNNAMED" \
--add-flags "--add-opens java.base/sun.nio.ch=ALL-UNNAMED" \
--add-flags "--add-opens java.base/sun.nio.fs=ALL-UNNAMED" \
--add-flags "--add-opens java.base/sun.security.ssl=ALL-UNNAMED" \
--add-flags "--add-opens java.base/sun.security.util=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/com.apple.eawt=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/com.apple.eawt.event=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/com.apple.laf=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/com.sun.java.swing=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/com.sun.java.swing.plaf.gtk=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/java.awt=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/java.awt.dnd.peer=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/java.awt.event=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/java.awt.font=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/java.awt.image=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/java.awt.peer=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/javax.swing=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/javax.swing.plaf.basic=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/javax.swing.text=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/javax.swing.text.html=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/sun.awt=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/sun.awt.X11=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/sun.awt.datatransfer=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/sun.awt.image=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/sun.awt.windows=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/sun.font=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/sun.java2d=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/sun.lwawt=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/sun.lwawt.macosx=ALL-UNNAMED" \
--add-flags "--add-opens java.desktop/sun.swing=ALL-UNNAMED" \
--add-flags "--add-opens java.management/sun.management=ALL-UNNAMED" \
--add-flags "--add-opens jdk.attach/sun.tools.attach=ALL-UNNAMED" \
--add-flags "--add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED" \
--add-flags "--add-opens jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED" \
--add-flags "--add-opens jdk.jdi/com.sun.tools.jdi=ALL-UNNAMED" \
--add-flags "--enable-native-access=ALL-UNNAMED" \
--add-flags "-Djdk.lang.Process.launchMechanism=FORK" \
--add-flags "-cp \"$out/libexec/kotlin-lsp/lib/*\" com.jetbrains.ls.kotlinLsp.KotlinLspServerKt"
runHook postInstall
'';
meta = {
description = "Kotlin Language Server (Standalone Binary)";
homepage = "https://github.com/Kotlin/kotlin-lsp";
license = lib.licenses.asl20;
platforms = lib.platforms.linux ++ lib.platforms.darwin;
};
}

View File

@@ -0,0 +1,56 @@
{pkgs, ...}: {
programs.nixvim = {
extraPackages = with pkgs; [
statix
selene
eslint_d
stylelint
yamllint
sqlfluff
markdownlint-cli2
ruff
rubocop
checkstyle
golangci-lint
python312Packages.flake8
clippy
cppcheck
cmake-lint
];
plugins.lint = {
enable = true;
lintersByFt = {
bash = ["bash"];
nix = ["statix"];
lua = ["selene"];
css = ["stylelint"];
javascript = ["eslint_d"];
javascriptreact = ["eslint_d"];
typescript = ["eslint_d"];
typescriptreact = ["eslint_d"];
sql = ["sqlfluff"];
yaml = ["yamllint"];
markdown = ["markdownlint-cli2"];
python = ["ruff"];
ruby = ["rubocop"];
go = ["golangcilint"];
java = ["checkstyle"];
rust = ["clippy"];
cpp = ["cppcheck"];
cmake = ["cmakelint"];
};
};
};
}

View File

@@ -0,0 +1,53 @@
{
enable = true;
settings = {
preset = "colorful";
symbolMap = {
Copilot = "";
Text = "󰉿";
Method = "󰆧";
Function = "󰊕";
Constructor = "";
Field = "󰜢";
Variable = "󰀫";
Class = "󰠱";
Interface = "";
Module = "";
Property = "󰜢";
Unit = "󰑭";
Value = "󰎠";
Enum = "";
Keyword = "󰌋";
Snippet = "";
Color = "󰏘";
File = "󰈙";
Reference = "󰈇";
Folder = "󰉋";
EnumMember = "";
Constant = "󰏿";
Struct = "󰙅";
Event = "";
Operator = "󰆕";
TypeParameter = "";
};
extraOptions = {
maxwidth = 50;
mode = "symbol";
ellipsisChar = "...";
menu = {
path = "[Path]";
cmdline = "[CMD]";
nvim_lsp = "[LSP]";
buffer = "[Buffer]";
luasnip = "[Snippet]";
};
show_labelDetails = true;
before.__raw = ''
require'tailwind-tools.cmp'.lspkind_format
'';
};
};
}

View File

@@ -0,0 +1,123 @@
{pkgs, ...}: {
programs.nixvim = {
extraPlugins = with pkgs.vimPlugins; [SchemaStore-nvim];
extraPackages = let
kotlin-lsp = pkgs.callPackage ./kotlin-lsp.nix {};
in [kotlin-lsp];
plugins = {
jdtls.enable = true;
};
lsp.servers = {
"*".config = {
root_markers = [
".git"
"flake.nix"
];
};
bashls.enable = true;
nixd.enable = true;
lua_ls = {
enable = true;
config.on_init.__raw =
# lua
''
function(client)
if client.workspace_folders then
local path = client.workspace_folders[1].name
if
path ~= vim.fn.stdpath('config')
and (vim.uv.fs_stat(path .. '/.luarc.json') or vim.uv.fs_stat(path .. '/.luarc.jsonc'))
then
return
end
end
client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, {
runtime = {
version = 'LuaJIT',
path = {
'lua/?.lua',
'lua/?/init.lua',
},
},
workspace = {
checkThirdParty = false,
library = {
vim.env.VIMRUNTIME
}
}
})
end
'';
};
typos_lsp = {
enable = true;
config.init_options.diagnosticSeverity = "Hint";
};
html.enable = true;
ts_ls.enable = true;
cssls.enable = true;
eslint.enable = true;
tailwindcss.enable = true;
taplo.enable = true;
jsonls = {
enable = true;
config.json = {
schemas.__raw = "require('schemastore').json.schemas()";
validate.enable = true;
};
};
yamlls = {
enable = true;
config.yaml = {
schemaStore = {
enable = false;
url = "";
};
schemas.__raw = "require('schemastore').yaml.schemas()";
};
};
texlab.enable = true;
marksman.enable = true;
sqruff = {
enable = true;
config.sqruff.indentation = {
indent_unit = "space";
tab_space_size = 2;
};
};
graphql.enable = true;
dockerls.enable = true;
docker_compose_language_service.enable = true;
gopls.enable = true;
dartls.enable = true;
pylyzer.enable = true;
solargraph.enable = true;
jdtls.enable = true;
kotlin_lsp.enable = true;
# also see lang/rust.nix
rust_analyzer = {
enable = true;
packageFallback = true;
};
clangd.enable = true;
cmake.enable = true;
glslls.enable = true;
qmlls.enable = true;
};
};
}

View File

@@ -0,0 +1,84 @@
{pkgs, ...}: {
plugins.luasnip = {
enable = true;
settings = {
enable_autosnippets = true;
store_selection_keys = "<Tab>";
};
fromVscode = [
{
lazyLoad = true;
paths = pkgs.vimPlugins.friendly-snippets;
}
];
};
extraConfigLua = let
snippets = {
nix = import ./nix;
};
escape = text: pkgs.lib.generators.toLua {} text;
escapeLines = text: pkgs.lib.generators.toLua {} (pkgs.lib.strings.splitString "\n" text);
escapeLua = pkgs.lib.escape ["\\" "\"" "\n"];
generateSnippetBody = {
template,
placeholders ? {},
delimiters ? "<>",
...
}:
if placeholders == {}
then "t(${escapeLines template})"
else let
templateStr = escape template;
generatePlaceholderEntry = index: defaultValue: let
node =
if defaultValue == null
then "i(${index})"
else "i(${index}, \"${escapeLua defaultValue}\")";
in "[${index}] = ${node}";
placeholderEntries = pkgs.lib.attrsets.mapAttrsToList generatePlaceholderEntry placeholders;
placeholderTable = "{ ${pkgs.lib.strings.concatStringsSep ", " placeholderEntries} }";
delimitersTable = "{ delimiters = \"${escapeLua delimiters}\" }";
in "fmt(${templateStr}, ${placeholderTable}, ${delimitersTable})";
generateLanguageSnippets = langSnippets: let
snippetEntries =
pkgs.lib.attrsets.mapAttrsToList (
name: definition: let
snippetName = escapeLua name;
snippetBody = generateSnippetBody definition;
in " s(\"${snippetName}\", ${snippetBody})"
)
langSnippets;
in
pkgs.lib.strings.concatStringsSep ",\n" snippetEntries;
buildLuasnipConfig = snippets: let
languageBlocks =
pkgs.lib.attrsets.mapAttrsToList (
langName: langSnippets: ''
ls.add_snippets("${langName}", {
${generateLanguageSnippets langSnippets}
})
''
)
snippets;
allLanguageBlocks = pkgs.lib.strings.concatStringsSep "\n\n" languageBlocks;
in ''
local ls = require("luasnip")
local s = ls.snippet
local i = ls.insert_node
local t = ls.text_node
local fmt = require("luasnip.extras.fmt").fmt
${allLanguageBlocks}
'';
in
buildLuasnipConfig snippets;
}

View File

@@ -0,0 +1,84 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
ags = {
url = "github:aylur/ags";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
self,
nixpkgs,
flake-utils,
ags,
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {inherit system;};
name = "<1>";
version = "<2>";
entry = "<3>";
watchScript = pkgs.writeShellScriptBin "watch" ''
set -euo pipefail
export FILES=$(find . -not \( -path "./node_modules*" -o -path "./@girs*" \) -type f -name "*.ts*")
echo "$FILES" | ${pkgs.lib.getExe pkgs.entr} -crs 'echo "Change detected, restarting..." && ags run ./main.tsx'
'';
astalPackages = with ags.packages.${system}; [
io
astal4
<0>
];
buildInputs = with pkgs; [
gjs
watchScript
];
extraPackages = with pkgs; [
libadwaita
libsoup_3
];
in {
packages.default = pkgs.stdenv.mkDerivation {
inherit name version;
src = ./.;
nativeBuildInputs = with pkgs; [
wrapGAppsHook3
gobject-introspection
ags.packages.${system}.default
];
buildInputs =
astalPackages
++ buildInputs
++ extraPackages;
installPhase = ''
mkdir -p $out/bin $out/share
cp -r * $out/share
ags bundle ${entry} $out/bin/${name} -d "SRC='$out/share'"
'';
};
apps.default = flake-utils.lib.mkApp {
drv = self.packages.${system}.default;
};
devShells.default = pkgs.mkShell {
buildInputs =
[
(ags.packages.${system}.default.override {
extraPackages = astalPackages ++ extraPackages;
})
]
++ buildInputs;
};
});
}

View File

@@ -0,0 +1,116 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
};
crane.url = "github:ipetkov/crane";
};
outputs = {
nixpkgs,
fenix,
crane,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {inherit system;};
pname = "<1>";
version = "<2>";
rust-toolchain = with fenix.packages.${system};
combine [
stable.rustc
stable.cargo
stable.rust-src
stable.rust-analyzer
];
bevyDeps = with pkgs; [
pkg-config
# Audio
alsa-lib
# Vulkan
vulkan-loader
vulkan-tools
libudev-zero
# X11
xorg.libX11
xorg.libXcursor
xorg.libXi
xorg.libXrandr
# Wayland
wayland
libxkbcommon
# linker
lld
];
runtimeLibs = pkgs.lib.makeLibraryPath bevyDeps;
craneLib = (crane.mkLib pkgs).overrideToolchain rust-toolchain;
cargoArtifacts = craneLib.buildDepsOnly {
pname = "${pname}-deps";
src = craneLib.cleanCargoSource (craneLib.path ./.);
nativeBuildInputs = with pkgs; [pkg-config];
buildInputs = bevyDeps;
};
in {
packages.default = craneLib.buildPackage {
inherit pname version;
src = craneLib.cleanCargoSource (craneLib.path ./.);
inherit cargoArtifacts;
nativeBuildInputs = with pkgs; [
pkg-config
rust-toolchain
lld
makeWrapper
];
buildInputs = bevyDeps;
CARGO_PROFILE_RELEASE_LTO = "thin";
CARGO_PROFILE_RELEASE_CODEGEN_UNITS = 1;
CARGO_PROFILE_RELEASE_STRIP = true;
RUSTFLAGS = "-C link-arg=-fuse-ld=lld";
postInstall = ''
wrapProgram "$out/bin/${pname}" \
--prefix LD_LIBRARY_PATH : ${runtimeLibs}
'';
meta = with pkgs.lib; {
description = "<3>";
license = licenses.mit;
};
};
devShells.default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [
pkg-config
lld
];
packages = with pkgs;
[
rust-toolchain
cargo-watch
cargo-edit
cargo-tarpaulin
]
++ bevyDeps;
shellHook = ''
export RUST_SRC_PATH=${fenix.packages.${system}.stable.rust-src}/lib/rustlib/src/rust/library
export LD_LIBRARY_PATH=${runtimeLibs}:$LD_LIBRARY_PATH
'';
};
formatter = pkgs.nixpkgs-fmt;
});
}

View File

@@ -0,0 +1,44 @@
{
flake = {
template = builtins.readFile ./flake.nix;
placeholders = {
"0" = null;
};
};
flaketauri.template = builtins.readFile ./tauri.flake.nix;
flakeflutter.template = builtins.readFile ./flutter.flake.nix;
flakeags = {
template = builtins.readFile ./ags.flake.nix;
placeholders = {
"1" = "project-name";
"2" = "0.1.0";
"3" = "main.tsx";
"0" = null;
};
};
flakerust = {
template = builtins.readFile ./rust.flake.nix;
placeholders = {
"1" = "rust-app";
"2" = "0.1.0";
"3" = "A Rust application";
"0" = null;
};
};
flakebevy = {
template = builtins.readFile ./bevy.flake.nix;
placeholders = {
"1" = "bevy-app";
"2" = "0.1.0";
"3" = "A Bevy application";
};
};
flakemaven = {
template = builtins.readFile ./maven.flake.nix;
placeholders."0" = "25";
};
flakegradle = {
template = builtins.readFile ./gradle.flake.nix;
placeholders."0" = "25";
};
}

View File

@@ -0,0 +1,17 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = {
nixpkgs,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {inherit system;};
in {
<0>
});
}

View File

@@ -0,0 +1,46 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = {
nixpkgs,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {
inherit system;
config = {
allowUnfree = true;
android_sdk.accept_license = true;
};
};
buildToolsVersion = "35.0.0";
androidComposition = pkgs.androidenv.composeAndroidPackages {
buildToolsVersions = [buildToolsVersion "28.0.3"];
platformVersions = ["36" "28"];
abiVersions = ["armeabi-v7a" "arm64-v8a"];
includeNDK = true;
ndkVersions = ["27.0.12077973"];
cmakeVersions = ["3.22.1"];
};
androidSdk = androidComposition.androidsdk;
jdk = pkgs.jdk17;
in {
devShells.default = pkgs.mkShell rec {
buildImports = with pkgs; [
flutter
androidSdk
jdk
];
ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
ANDROID_NDK_ROOT = "${ANDROID_SDK_ROOT}/ndk-bundle";
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${buildToolsVersion}/aapt2";
};
});
}

View File

@@ -0,0 +1,22 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = {
nixpkgs,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {inherit system;};
jdk = pkgs.jdk <0>;
in {
devShells.default = pkgs.mkShell {
buildInputs = [pkgs.gradle jdk];
JAVA_HOME = jdk.home;
GRADLE_OPTS = "-Dorg.gradle.java.installations.auto-download=false -Dorg.gradle.java.installations.fromEnv=true";
};
});
}

View File

@@ -0,0 +1,21 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = {
nixpkgs,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {inherit system;};
jdk = pkgs.jdk<0>;
in {
devShells.default = pkgs.mkShell {
nativeBuildInputs = [pkgs.maven jdk];
JAVA_HOME = jdk.home;
};
});
}

View File

@@ -0,0 +1,39 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = {
nixpkgs,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {inherit system;};
name = "npm-app";
version = "0.1.0";
buildInputs = with pkgs; [
nodejs
];
in {
packages.default = pkgs.buildNpmPackage {
inherit name version buildInputs;
npmDeps = pkgs.importNpmLock {
npmRoot = ./.;
};
inherit (pkgs.importNpmLock) npmConfigHook;
installPhase = ''
# ...
'';
};
devShells.default = pkgs.mkShell {
packages = buildInputs;
};
});
}

View File

@@ -0,0 +1,81 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
};
crane.url = "github:ipetkov/crane";
};
outputs = {
nixpkgs,
fenix,
crane,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {inherit system;};
pname = "<1>";
version = "<2>";
rust-toolchain = with fenix.packages.${system};
combine [
stable.rustc
stable.cargo
stable.rust-src
stable.rust-analyzer
];
craneLib = (crane.mkLib pkgs).overrideToolchain rust-toolchain;
cargoArtifacts = craneLib.buildDepsOnly {
pname = "${pname}-deps";
src = craneLib.cleanCargoSource (craneLib.path ./.);
};
in {
packages.default = craneLib.buildPackage {
inherit pname version;
src = craneLib.cleanCargoSource (craneLib.path ./.);
inherit cargoArtifacts;
nativeBuildInputs = [rust-toolchain pkgs.lld];
buildInputs = with pkgs;
[
<0>
]
++ lib.optionals stdenv.isDarwin [
darwin.apple_sdk.frameworks.Security
];
RUSTFLAGS = "-C link-arg=-fuse-ld=lld";
meta = with pkgs.lib; {
description = "<3>";
license = licenses.mit;
};
};
devShells.default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [
lld
];
buildInputs = with pkgs; [
rust-toolchain
cargo-watch
cargo-edit
cargo-tarpaulin
];
shellHook = ''
export RUST_SRC_PATH=${fenix.packages.${system}.stable.rust-src}/lib/rustlib/src/rust/library
'';
};
formatter = pkgs.nixpkgs-fmt;
});
}

View File

@@ -0,0 +1,51 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
rust-overlay.url = "github:oxalica/rust-overlay";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = {
nixpkgs,
rust-overlay,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (system: let
overlays = [(import rust-overlay)];
pkgs = import nixpkgs {inherit system overlays;};
rustToolchain = pkgs.rust-bin.stable.latest.default.override {
extensions = ["rust-src"];
};
linuxDeps = with pkgs; [
webkitgtk_4_1
gtk3
cairo
gdk-pixbuf
glib
dbus
openssl
pkg-config
librsvg
];
in {
devShells.default = pkgs.mkShell {
buildInputs = with pkgs;
[
rustToolchain
rust-analyzer
nodejs
cargo-tauri
]
++ linuxDeps;
shellHook = ''
export WEBKIT_DISABLE_COMPOSITING_MODE=1
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath linuxDeps}"
'';
};
});
}

View File

@@ -0,0 +1,14 @@
{
plugins = {
treesitter = {
enable = true;
folding = false;
nixGrammars = true;
nixvimInjections = true;
settings = import ./settings.nix;
};
ts-autotag.enable = true;
treesitter-textobjects = import ./textobjects.nix;
};
}

View File

@@ -0,0 +1,83 @@
{
indent.enable = true;
highlight.enable = true;
ensureInstalled = [
"bash"
"lua"
"nix"
"c"
"cpp"
"make"
"cmake"
"rust"
"dockerfile"
"go"
"gomod"
"gosum"
"css"
"html"
"templ"
"tsx"
"astro"
"javascript"
"typescript"
"xml"
"json"
"yaml"
"toml"
"sql"
"http"
"graphql"
"python"
"requirements"
"regex"
"comment"
"latex"
"markdown"
"markdown_inline"
"diff"
"gitignore"
"git_config"
"gitattributes"
"dart"
"java"
"hyprlang"
];
refactor = {
highlight_definitions.enable = true;
highlight_current_scope = true;
};
endwise.enable = true;
matchup = {
enable = true;
include_match_words = true;
};
incremental_selection = {
enable = true;
keymaps = {
init_selection = "<C-Space>";
node_incremental = "v";
scope_incremental = false;
node_decremental = "V";
};
};
playground.enable = true;
}

View File

@@ -0,0 +1,47 @@
{
enable = true;
settings = {
select = {
enable = true;
lookahead = true;
keymaps = {
"af" = "@function.outer";
"if" = "@function.inner";
"ac" = "@class.outer";
"ic" = "@class.inner";
"a," = "@parameter.outer";
"i," = "@parameter.inner";
};
};
move = {
enable = true;
setJumps = true;
gotoNextStart = {
"]f" = "@function.outer";
"]c" = "@class.outer";
"]," = "@parameter.inner";
};
gotoNextEnd = {
"]F" = "@function.outer";
"]C" = "@function.outer";
};
gotoPreviousStart = {
"[f" = "@function.outer";
"[c" = "@class.outer";
"[," = "@parameter.inner";
};
gotoPreviousEnd = {
"[F" = "@function.outer";
"[C" = "@class.outer";
};
};
swap = {
enable = true;
swapNext = {">," = "@parameter.inner";};
swapPrevious = {"<," = "@parameter.inner";};
};
};
}

View File

@@ -0,0 +1,61 @@
let
themes = import ./themes.nix;
theme = themes.dg_baby;
in {
plugins.alpha = {
enable = true;
settings = {
layout = [
{
type = "padding";
val = 2;
}
{
type = "text";
val = theme.image;
opts = {
position = "center";
hl = "Type";
};
}
{
type = "padding";
val = 2;
}
{
type = "group";
val = let
button = shortcut: val: {
type = "button";
inherit val;
opts = {
position = "center";
inherit shortcut;
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
};
in [
(button "󱁐 ff" "󰱼 Find file")
(button "󱁐 fo" "󱋡 Recently opened files")
(button "󱁐 fl" " Live-Grep")
];
}
{
type = "padding";
val = 2;
}
{
type = "text";
val = theme.quote;
opts = {
position = "center";
hl = "Keyword";
};
}
];
};
};
}

View File

@@ -0,0 +1,53 @@
{
rei = {
quote = "";
image = [
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
];
};
dg_baby = {
quote = "Official Drain © Licensed Product";
image = [
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
];
};
}

View File

@@ -0,0 +1,45 @@
{
plugins.neotest.enable = true;
extraConfigLua =
# lua
''
-- require("neotest").setup({
-- adapters = {
-- require("rustaceanvim.neotest")
-- },
-- })
'';
plugins.dap = {
enable = true;
signs = {
dapBreakpoint = {
text = "";
texthl = "DiagnosticError";
numhl = "DapBreakpoint";
};
dapBreakpointCondition = {
text = "";
texthl = "DiagnosticWarn";
numhl = "DiagnosticWarn";
};
dapLogPoint = {
text = "󱂅";
texthl = "Comment";
numhl = "Comment";
};
dapStopped = {
text = "";
texthl = "IncSearch";
linehl = "CursorLine";
numhl = "IncSearch";
};
dapBreakpointRejected = {
text = "";
texthl = "DiagnosticError";
numhl = "DiagnosticError";
};
};
};
}

View File

@@ -0,0 +1,33 @@
{
imports = [
./alpha
./lualine
./toggleterm.nix
./which-key
./fzf-lua.nix
./grug-far.nix
./presence.nix
./silicon.nix
./todo-comments.nix
./debugging.nix
];
plugins = {
nix-develop = {
enable = true;
ignoredVariables = {
SHELL = false;
};
};
wakatime.enable = true;
};
extraConfigLua =
#lua
''
vim.api.nvim_create_autocmd("VimEnter", {
desc = "Automatically enter Nix devshell",
command = "NixDevelop",
})
'';
}

View File

@@ -0,0 +1,12 @@
{
plugins.fzf-lua = {
enable = true;
settings = {
winopts = {};
files = {
git_icons = true;
file_icons = true;
};
};
};
}

View File

@@ -0,0 +1,3 @@
{
plugins.grug-far.enable = true;
}

View File

@@ -0,0 +1,14 @@
{
bg = "#1e1e2e";
fg = "#cdd6f4";
yellow = "#f9e2af";
cyan = "#89dceb";
green = "#a6e3a1";
orange = "#fab387";
violet = "#b4befe";
blue = "#89b4fa";
red = "#f38ba8";
magenta = "#cba6f7";
grey = "#585b70";
pink = "#f5c2e7";
}

View File

@@ -0,0 +1,78 @@
{
extraConfigLua = builtins.readFile ./hide_statusbar.lua;
plugins.lualine = let
colors = import ./colors.nix;
in {
enable = true;
settings = {
options = {
section_separators = "";
component_separators = "";
theme = {
normal.c = {
bg = "";
inherit (colors) fg;
};
inactive.c = {
bg = "";
inherit (colors) fg;
};
};
refresh.events = [
"WinEnter"
"BufEnter"
"BufWritePost"
"SessionLoadPost"
"FileChangedShellPost"
"VimResized"
"Filetype"
"CursorMoved"
"CursorMovedI"
"ModeChanged"
"RecordingEnter"
"RecordingLeave"
];
};
# to be visible, change laststatus option value at options.nix
sections = {
# these are to remove the defaults
lualine_a = [{}];
lualine_b = [{}];
lualine_c = [{}];
lualine_x = [{}];
lualine_y = [{}];
lualine_z = [{}];
};
inactive_sections = {
# these are to remove the defaults
lualine_a = [{}];
lualine_b = [{}];
lualine_c = [{}];
lualine_x = [{}];
lualine_y = [{}];
lualine_z = [{}];
};
tabline = import ./tabline.nix;
};
};
keymaps = let
buffers = bind: let
num =
if (bind == 0)
then 10
else bind;
in {
key = "<M-${toString bind}>";
mode = ["n" "i" "v" "s" "t" "o"];
options.desc = "Buffer ${toString num}";
action = "<cmd>LualineBuffersJump ${toString num}<cr>";
};
in
map buffers [1 2 3 4 5 6 7 8 9 10];
}

View File

@@ -0,0 +1,4 @@
vim.api.nvim_create_autocmd('WinEnter', {
once = true,
command = [[ set laststatus=0 ]],
})

View File

@@ -0,0 +1,48 @@
colors: get-mode-color: [
{
__unkeyed-1 = "mode";
color.__raw = get-mode-color;
}
{
__unkeyed-1.__raw = ''
function()
local reg_rec = vim.fn.reg_recording()
if reg_rec ~= "" then
return "󰑊 rec (" .. reg_rec .. ")"
else
return ""
end
end
'';
color = {
fg = colors.red;
gui = "bold";
};
}
{
icon = "";
__unkeyed-1 = "branch";
color = {
fg = colors.violet;
gui = "bold";
};
}
{
mode = 2;
__unkeyed-1 = "buffers";
symbols = {
modified = "";
alternate_file = "";
};
buffers_color = {
inactive.fg = colors.grey;
active = {
fg = colors.magenta;
gui = "bold";
};
};
}
]

View File

@@ -0,0 +1,64 @@
colors: get-mode-color: [
{
path = 1;
shorting_target = 150;
color.fg = colors.grey;
__unkeyed-1 = "filename";
disabled_buftypes = ["terminal"];
}
{
sources = ["nvim_lsp"];
__unkeyed-1 = "diagnostics";
diagnostics_color = {
color_error.fg = colors.red;
color_warn.fg = colors.yellow;
color_info.fg = colors.blue;
color_hint.fg = colors.cyan;
};
symbols = {
error = " ";
warn = " ";
info = " ";
};
}
{
__unkeyed-1 = "lsp_status";
icon = "lsp:";
disabled_buftypes = ["terminal"];
color = {
fg = colors.magenta;
gui = "bold";
};
ignore_lsp = [
"typos_lsp"
];
}
{
__unkeyed-1 = "diff";
symbols = {
added = " ";
modified = "󰝤 ";
removed = " ";
};
diff_color = {
added.fg = colors.green;
removed.fg = colors.red;
modified.fg = colors.orange;
};
}
{
# icon = ""; # NOTE: IDK why it shows twice
icon = "";
padding.right = 1;
color.fg = colors.violet;
__unkeyed-1 = "gh-actions";
}
{
color.fg = colors.pink;
__unkeyed-1 = "progress";
}
]

View File

@@ -0,0 +1,39 @@
let
colors = import ./colors.nix;
get-mode-color =
# lua
"
function()
local mode_color = {
n = '${colors.blue}',
i = '${colors.green}',
v = '${colors.violet}',
[''] = '${colors.violet}',
V = '${colors.violet}',
c = '${colors.magenta}',
no = '${colors.red}',
s = '${colors.orange}',
S = '${colors.orange}',
[''] = '${colors.orange}',
ic = '${colors.yellow}',
R = '${colors.magenta}',
Rv = '${colors.magenta}',
cv = '${colors.red}',
ce = '${colors.red}',
r = '${colors.cyan}',
rm = '${colors.cyan}',
['r?'] = '${colors.cyan}',
['!'] = '${colors.red}',
t = '${colors.pink}',
}
return { fg = mode_color[vim.fn.mode()] }
end
";
in {
lualine_c = import ./section-left.nix colors get-mode-color;
lualine_x = import ./section-right.nix colors get-mode-color;
}

View File

@@ -0,0 +1,23 @@
{
plugins.presence = {
enable = true;
settings = {
neovim_image_text = "Neovim";
main_image = "file";
buttons.__raw = ''
function (buffer, repo_url)
local buttons = {}
if repo_url ~= nil then
table.insert(buttons, {
label = "Git Repository",
url = repo_url
})
end
return buttons
end
'';
};
};
}

View File

@@ -0,0 +1,24 @@
{pkgs, ...}: let
theme = "Catppuccin";
font = "JetBrainsMono Nerd Font=32;Noto Color Emoji=34";
in {
extraPackages = with pkgs; [
silicon
jetbrains-mono
noto-fonts-color-emoji
];
extraPlugins = let
builds = import ../builds.nix pkgs;
in
with builds; [silicon];
extraConfigLua = ''
require 'nvim-silicon'.setup {
font = '${font}',
theme = '${theme}',
no_line_number = true,
no_window_controls = true,
}
'';
}

View File

@@ -0,0 +1,22 @@
{
plugins.todo-comments = {
enable = true;
settings.keywords = let
word = icon: color: {inherit icon color;};
hint = icon: word icon "hint";
info = icon: word icon "info";
test = icon: word icon "test";
in {
NOTE = hint "";
TODO = hint "";
REFACTOR = hint "";
INFO = info "";
DOCS = info "";
LINK = info "";
GITHUB = info "";
TEST = test "󰙨";
};
};
}

View File

@@ -0,0 +1,14 @@
{
plugins.toggleterm = {
enable = true;
settings = {
float_opts = {};
persistent_size = true;
direction = "horizontal";
open_mapping = "[[<M-CR>]]";
shade_filetypes = ["lazygit"];
highlights.FloatBorder.guifg = "#7b8496";
};
};
}

View File

@@ -0,0 +1,227 @@
local wk = require "which-key"
local gitsigns = require "gitsigns"
local Terminal = require("toggleterm.terminal").Terminal
local set_key = {
cmd = function(key, action, desc, hidden)
return {
"<leader>" .. key,
type(action) == "string" and "<cmd>" .. action .. "<cr>" or action,
desc = desc:gsub("^%l", string.upper),
hidden = hidden or false,
}
end,
}
local function smart_buffer_delete()
local current_buf = vim.api.nvim_get_current_buf()
pcall(vim.cmd.bnext)
if current_buf == vim.api.nvim_get_current_buf() then
vim.cmd.enew()
end
pcall(vim.cmd, "bdelete " .. current_buf)
end
wk.add {
set_key.cmd("e", require("nvim-tree.api").tree.toggle, "Files"),
set_key.cmd("w", "w!", "Write buffer"),
set_key.cmd("d", smart_buffer_delete, "Delete buffer"),
set_key.cmd("Q", "qa", "Quit all", true),
set_key.cmd("q", "quit", "Quit window", true),
}
set_key.git_signs = function(key, action, desc)
return set_key.cmd("g" .. key, function()
gitsigns[action]()
end, desc)
end
local function lazygit_toggle()
local lazygit = Terminal:new {
cmd = "lazygit",
hidden = true,
direction = "float",
}
lazygit:toggle()
end
wk.add {
{ "<leader>g", group = "Git" },
-- Gitsigns --
set_key.git_signs("s", "stage_buffer", "Stage buffer"),
set_key.git_signs("R", "reset_buffer", "Reset buffer"),
set_key.git_signs("t", "toggle_signs", "Toggle signs"),
set_key.git_signs("n", "toggle_numhl", "Toggle numhl"),
set_key.git_signs("L", "toggle_linehl", "Toggle linehl"),
set_key.git_signs("d", "toggle_deleted", "Toggle deleted"),
set_key.cmd("gg", lazygit_toggle, "Lazygit"),
set_key.cmd("gH", "GhActions", "Github Actions"),
set_key.cmd("gm", "GitMessenger", "Show Message"),
{ "<leader>gh", group = "Hunk" },
set_key.git_signs("hs", "stage_hunk", "Stage"),
set_key.git_signs("hr", "reset_hunk", "Reset"),
set_key.git_signs("hv", "preview_hunk", "Preview"),
set_key.git_signs("hu", "undo_stage_hunk", "Undo Stage"),
set_key.cmd("ghn", function()
gitsigns.nav_hunk "next"
end, "Next"),
set_key.cmd("ghp", function()
gitsigns.nav_hunk "prev"
end, "Previous"),
set_key.git_signs("hd", "diffthis", "Diff this"),
set_key.cmd("ghD", function()
gitsigns.diffthis "~"
end, "Diff this"),
}
--- LSP keys ---
set_key.lsp = function(key, action)
return set_key.cmd("l" .. key, "Lsp" .. action, action)
end
set_key.lsp_saga = function(key, action, desc)
return set_key.cmd("l" .. key, "Lspsaga " .. action, desc or action)
end
wk.add {
{ "<leader>l", group = "Lsp" },
set_key.lsp("i", "Info"),
set_key.lsp("R", "Restart"),
set_key.lsp("s", "Start"),
set_key.lsp("x", "Stop"),
set_key.cmd("lf", require("conform").format, "Format"),
set_key.cmd("lF", "ConformInfo", "Format"),
set_key.lsp_saga("r", "rename"),
set_key.lsp_saga("o", "outline"),
set_key.lsp_saga("a", "code_action", "Code Action"),
}
--- FZF keys ---
set_key.fzf = function(key, action, desc)
return set_key.cmd("f" .. key, function()
local fzf = require "fzf-lua"
fzf[action]()
end, desc or action)
end
wk.add {
{ "<leader>f", group = "FZF" },
set_key.fzf("f", "files", "Files"),
set_key.fzf("o", "oldfiles", "Old files"),
set_key.fzf("l", "live_grep", "Live grep"),
set_key.fzf("b", "buffers", "Buffers"),
set_key.fzf("k", "keymaps", "Keymaps"),
set_key.fzf("j", "jumps", "Jumps"),
set_key.fzf("c", "commands", "Commands"),
set_key.fzf("C", "colorschemes", "Colorschemes"),
set_key.fzf("t", "tabs", "Tabs"),
set_key.fzf("T", "treesitter", "Treesitter"),
-- set_key.cmd("fh", "FzfHarpoon", "Harpoon"),
set_key.fzf("s", "spell_suggest", "Spelling suggest"),
{ "<leader>fg", group = "Git" },
set_key.fzf("gg", "git_files", "Files"),
set_key.fzf("gs", "git_status", "Status"),
set_key.fzf("gb", "git_bcommits", "Buffer commits"),
set_key.fzf("gB", "git_branches", "Branches"),
{ "<leader>fL", group = "LSP" },
set_key.fzf("Lr", "lsp_references", "References"),
set_key.fzf("Ld", "lsp_definitions", "Definitions"),
set_key.fzf("LD", "lsp_declarations", "Declarations"),
set_key.fzf("Lt", "lsp_typedefs", "Type definitions"),
set_key.fzf("Li", "lsp_implementations", "Implementations"),
set_key.fzf("Ls", "lsp_document_symbols", "Symbols"),
set_key.fzf("LS", "lsp_workspace_symbols", "Workspace symbols"),
-- set_key.fzf("LS", "lsp_live_workspace_symbols", "Live workspace symbols"),
set_key.fzf("LI", "lsp_incoming_calls", "Incoming calls"),
set_key.fzf("Lc", "lsp_code_actions", "Code actions"),
set_key.fzf("Lf", "lsp_finder", "Finder"),
set_key.fzf("Lo", "lsp_outgoing_calls", "Outgoing calls"),
-- set_key.fzf("LD", "diagnostics_document", "Diagnostics document"),
-- set_key.fzf("LD", "diagnostics_workspace", "Diagnostics workspace"),
}
set_key.trouble = function(key, action, desc)
return set_key.cmd("x" .. key, "Trouble " .. action .. " focus=true win.position=bottom", desc)
end
wk.add {
{ "<leader>x", group = "Trouble" },
set_key.trouble("x", "diagnostics filter.buf=0", "Buffer Diagnostics"),
set_key.trouble("X", "diagnostics", "Diagnostics"),
set_key.trouble("t", "todo", "Todo"),
set_key.trouble("q", "qflist", "QuickFix List"),
set_key.trouble("L", "loclist", "Location List"),
set_key.cmd("xv", function()
local current_value = vim.diagnostic.config().virtual_text
vim.diagnostic.config({ virtual_text = not current_value })
end, "Toggle virtual text"),
--- LSP ---
set_key.trouble("l", "lsp", "LSP"),
set_key.trouble("D", "lsp_declarations", "declarations"),
set_key.trouble("d", "lsp_definitions", "definitions"),
set_key.trouble("s", "symbols", "Symbols"),
set_key.trouble("i", "lsp_implementations", "implementations"),
set_key.trouble("I", "lsp_incoming_calls", "Incoming calls"),
set_key.trouble("O", "lsp_outgoing_calls", "Outgoing calls"),
set_key.trouble("r", "lsp_references", "references"),
set_key.trouble("T", "lsp_type_definitions", "type definitions"),
}
set_key.latex = function(key, action)
return set_key.cmd("L" .. key, "Vimtex" .. action, action)
end
wk.add {
{ "<leader>m", group = "Markdown" },
set_key.cmd("mr", "RenderMarkdown toggle", "Toggle render"),
set_key.cmd("mv", "MarkdownPreviewToggle", "Browser preview"),
--- Snap (Silicon) --
{ "<leader>S", group = "Snap(Silicon)" },
set_key.cmd("Ss", require("silicon").file, "Save as file"),
set_key.cmd("Sc", require("silicon").clip, "Copy to clipboard"),
--- Latex (Vimtex) --
{ "<leader>L", group = "Latex" },
set_key.latex("v", "View"),
set_key.latex("e", "Errors"),
set_key.latex("r", "Reload"),
set_key.latex("c", "Compile"),
set_key.cmd("r", require("grug-far").open, "Replace"),
set_key.cmd("z", function()
vim.wo.number = false
require("zen-mode").toggle()
end, "Zen Mode"),
set_key.cmd("u", "UndotreeToggle", "Undo Tree"),
set_key.cmd("H", "HexokinaseToggle", "Hexokinase"),
}
wk.add {
{ "<leader>t", group = "Debugging" },
--- dap ---
set_key.cmd("tb", "DapToggleBreakpoint", "Toggle Breakpoint"),
set_key.cmd("td", "DapContinue", "Continue Debug Session"),
set_key.cmd("tD", "DapNew", "New Debug Session"),
set_key.cmd("ts", "DapStepInto", "Step Into"),
set_key.cmd("tS", "DapStepOver", "Step Over"),
set_key.cmd("tr", function()
require("dap").repl.toggle()
end, "Toggle Debug REPL"),
--- neotest ---
set_key.cmd("tt", function()
require("neotest").run.run()
end, "Run nearest test"),
set_key.cmd("tT", function()
require("neotest").run.run({strategy = "dap"})
end, "Debug nearest test"),
set_key.cmd("ta", function()
require("neotest").run.run(vim.fn.expand("%"))
end, "Run all tests in file"),
}

View File

@@ -0,0 +1,17 @@
{pkgs, ...}: {
extraPackages = with pkgs; [lazygit];
plugins.which-key = {
enable = true;
settings = {
preset = "helix"; # "classic" | "modern" | "helix"
sort = ["manual"];
win = {
border = "rounded";
};
icon.mappings = false;
};
};
extraConfigLua = builtins.readFile ./config.lua;
}

View File

@@ -0,0 +1,2 @@
quote_style = "AutoPreferSignle"
call_parentheses = "None"

53
home/global.nix Normal file
View File

@@ -0,0 +1,53 @@
{
user,
pkgs,
stateVersion,
lib,
...
}: {
nixpkgs.config.allowUnfree = true;
nix = {
package = lib.mkDefault pkgs.nix;
settings.experimental-features = ["nix-command" "flakes"];
};
programs = {
home-manager.enable = true;
git = {
enable = true;
settings = {
commit.gpgsign = true;
url = {
"ssh://git@gitlab.uni-ulm.de".insteadOf = "https://gitlab.uni-ulm.de";
"ssh://git@github.com".insteadOf = "https://github.com";
};
user = {
email = "dominik.bernroider@icloud.com";
name = "demenik";
signingkey = "D3EC91B5457F4864";
};
"includeIf \"hasconfig:remote.*.url:git@gitlab.uni-ulm.de:*/**\"" = {
path = "${pkgs.writeText ".gitconfig-gitlab.uni-ulm.de" ''
[user]
email = "dominik.bernroider@uni-ulm.de"
name = "Dominik Bernroider"
''}";
};
init.defaultBranch = "main";
};
};
gpg.enable = true;
};
home = {
inherit stateVersion;
username = lib.mkDefault user;
homeDirectory = lib.mkDefault "/home/${user}";
sessionPath = ["$HOME/.local/bin"];
};
}

5
home/programs/cli/ai.nix Normal file
View File

@@ -0,0 +1,5 @@
{pkgs, ...}: {
home.packages = with pkgs; [
gemini-cli
];
}

21
home/programs/cli/bat.nix Normal file
View File

@@ -0,0 +1,21 @@
{pkgs, ...}: {
programs.bat = {
enable = true;
# config.theme = "Catppuccin Mocha";
themes = {
"Catppuccin Mocha" = {
src = pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "bat";
rev = "6810349";
sha256 = "1y5sfi7jfr97z1g6vm2mzbsw59j1jizwlmbadvmx842m0i5ak5ll";
};
file = "themes/Catppuccin Mocha.tmTheme";
};
};
};
programs.zsh.shellAliases = {
cat = "bat";
};
}

View File

@@ -0,0 +1,15 @@
{pkgs, ...}: {
programs.btop = {
enable = true;
# settings = {
# color_theme = "catppuccin-mocha";
# theme_background = false;
# };
themes = {
catppuccin-mocha = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/catppuccin/btop/f437574b600f1c6d932627050b15ff5153b58fa3/themes/catppuccin_mocha.theme";
sha256 = "0i263xwkkv8zgr71w13dnq6cv10bkiya7b06yqgjqa6skfmnjx2c";
};
};
};
}

View File

@@ -0,0 +1,5 @@
{pkgs, ...}: {
home.packages = with pkgs; [
vscode-extensions.vadimcn.vscode-lldb
];
}

View File

@@ -0,0 +1,13 @@
{
imports = [
./zoxide.nix
./bat.nix
./eza.nix
./btop.nix
./ssh.nix
./fastfetch.nix
./jq.nix
./ai.nix
./debugging.nix
];
}

21
home/programs/cli/eza.nix Normal file
View File

@@ -0,0 +1,21 @@
{pkgs, ...}: {
programs.eza = {
enable = true;
enableZshIntegration = true;
colors = "auto";
extraOptions = [
"--classify"
"--group-directories-first"
];
theme = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/eza-community/eza-themes/17095bff4792eecd7f4f1ed8301b15000331c906/themes/catppuccin.yml";
sha256 = "0hpchiiadyxfl5rx12msww94jbj5hvqma5b2jgcvllv1b2pd1ghd";
};
};
programs.zsh.shellAliases = {
ls = "eza";
};
}

View File

@@ -0,0 +1,47 @@
{
programs.fastfetch = {
enable = true;
settings = {
display = {
separator = " = ";
};
modules = let
mkLiteral = type: key: format: {
inherit type;
key = " ${key}";
format = "${format};";
};
mkString = type: key: format: mkLiteral type key "\"${format}\"";
emptyLine = {
type = "custom";
format = "";
};
in [
{
type = "title";
format = "{host-name-colored}.users.{user-name-colored} = "; #
}
(mkString "host" "host" "{family}")
(mkString "cpu" "cpu" "{name} ({cores-physical}C/{cores-logical}T) @ {freq-max}")
(mkString "memory" "memory" "{used}/{total} ({percentage})")
(mkString "disk" "disk" "{name} ({filesystem}) {size-used}/{size-total} ({size-percentage})")
(mkString "os" "os" "{name} {release}")
(mkString "kernel" "kernel" "{sysname} {arch} {display-version}")
(mkString "localip" "ip" "{ipv4} {ifname}") # last seen
emptyLine
(mkString "wm" "wm" "{pretty-name} {version} ({protocol-name})")
(mkString "editor" "editor" "{name} {version}")
{
type = "custom";
format = "};";
}
];
};
};
}

3
home/programs/cli/jq.nix Normal file
View File

@@ -0,0 +1,3 @@
{
programs.jq.enable = true;
}

32
home/programs/cli/ssh.nix Normal file
View File

@@ -0,0 +1,32 @@
{
programs.ssh = {
enable = true;
enableDefaultConfig = false;
matchBlocks = {
"*" = {
identityFile = "~/.ssh/id_rsa";
};
"homelab" = {
hostname = "46.5.154.149";
user = "nix";
};
"hyperion" = {
hostname = "192.168.178.55";
user = "demenik";
};
"sgi-uni-ulm" = {
hostname = "login.informatik.uni-ulm.de";
user = "db56";
};
"github.com" = {
user = "git";
identitiesOnly = true;
};
"gitlab.uni-ulm.de" = {
user = "git";
identitiesOnly = true;
};
};
};
}

View File

@@ -0,0 +1,10 @@
{
programs.zoxide = {
enable = true;
enableZshIntegration = true;
};
programs.zsh.shellAliases = {
cd = "z";
};
}

44
home/programs/default.nix Normal file
View File

@@ -0,0 +1,44 @@
{
inputs,
pkgs,
...
}: {
imports = [
./cli
./firefox.nix
./qbittorrent.nix
./nmgui.nix
./overskride.nix
./rofi.nix
./emulator.nix
./vpn.nix
./spicetify.nix
./thunderbird.nix
./obsidian.nix
./office.nix
./vesktop.nix
];
home.packages = with pkgs; [
inputs.bettersoundcloud.packages.${system}.default
gimp
aseprite
nautilus
nautilus-open-any-terminal
rquickshare
flameshot
openvpn3
libreoffice
prismlauncher
];
}

View File

@@ -0,0 +1,7 @@
{
wayland.windowManager.hyprland.settings.windowrulev2 = map (rule: "${rule}, class:^(Emulator)$") [
"float"
"keepaspectratio"
"pin"
];
}

155
home/programs/firefox.nix Normal file
View File

@@ -0,0 +1,155 @@
{lib, ...}: {
home.sessionVariables."BROWSER" = "firefox";
wayland.windowManager.hyprland.settings = {
env = ["BROWSER,firefox"];
windowrulev2 =
[
"workspace 2, class:^(firefox)$"
"fullscreenstate -1 2, class:^(firefox)$"
"float, title:^(Firefox - Sharing Indicator)$"
"suppressevent maximize, class:^(firefox)$"
]
++ map (rule: "${rule}, class:^(firefox)$, title:^(Picture-in-Picture)$") [
"float"
"keepaspectratio"
"pin"
"move 100%-w-5 100%-w-5"
];
};
xdg = {
mimeApps.defaultApplications = builtins.listToAttrs (builtins.map (key: {
name = key;
value = ["firefox.desktop"];
}) [
"x-scheme-handler/http"
"x-scheme-handler/https"
"text/html"
"text/xml"
"application/pdf"
]);
};
programs.firefox = {
enable = true;
profiles.default = {
name = "Default";
settings = {
"extensions.pocket.enabled" = false;
"browser.uidensity" = 0;
"browser.urlbar.suggest.engines" = false;
"browser.urlbar.suggest.openpage" = false;
"browser.urlbar.suggest.bookmark" = true;
"browser.toolbars.bookmarks.visibility" = "only show on new tab";
"browser.urlbar.suggest.addons" = false;
"browser.urlbar.suggest.pocket" = false;
"widget.use-xdg-desktop-portal.file-picker" = 1;
"browser.formfill.enable" = false;
"extensions.formautofill.addresses.enabled" = false;
};
search = {
force = true;
default = "ud";
order = [
"ud"
"no"
"np"
"hm"
"nv"
"lsp"
"crates"
];
engines = let
mkParams = lib.mapAttrsToList (name: value: {
inherit name value;
});
mkEngine = {
icon,
template,
params ? {},
definedAliases ? [],
}: {
inherit icon definedAliases;
urls = [
{
inherit template;
params = mkParams params;
}
];
};
in {
ud = mkEngine {
icon = "https://www.gstatic.com/images/branding/searchlogo/ico/favicon.ico";
template = "https://unduck.demenik.tech";
params = {q = "{searchTerms}";};
};
np = mkEngine {
icon = "https://search.nixos.org/images/nix-logo.png";
definedAliases = ["@np"];
template = "https://search.nixos.org/packages";
params = {
type = "packages";
channel = "unstable";
query = "{searchTerms}";
};
};
no = mkEngine {
icon = "https://search.nixos.org/images/nix-logo.png";
definedAliases = ["@no"];
template = "https://search.nixos.org/options";
params = {
channel = "unstable";
query = "{searchTerms}";
};
};
hm = mkEngine {
icon = "https://home-manager-options.extranix.com/images/favicon.png";
definedAliases = ["@hm"];
template = "https://home-manager-options.extranix.com";
params = {
release = "master";
query = "{searchTerms}";
};
};
nv = mkEngine {
icon = "https://raw.githubusercontent.com/nix-community/nixvim/main/assets/nixvim_logo.svg";
definedAliases = ["@nv"];
template = "https://nix-community.github.io/nixvim/";
params = {
search = "{searchTerms}";
};
};
lsp = mkEngine {
icon = "https://github.com/neovim.png";
definedAliases = ["@lsp"];
template = "https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#{searchTerms}";
};
crates = mkEngine {
icon = "https://crates.io/assets/cargo.png";
definedAliases = ["@crates"];
template = "https://crates.io/search";
params = {
q = "{searchTerms}";
};
};
};
};
};
};
}

11
home/programs/nmgui.nix Normal file
View File

@@ -0,0 +1,11 @@
{pkgs, ...}: {
home.packages = with pkgs; [
nmgui
];
wayland.windowManager.hyprland.settings.windowrulev2 = map (rule: "${rule}, class:^(com.network.manager)$") [
"float"
"size 500 600"
"center"
];
}

View File

@@ -0,0 +1,7 @@
{pkgs, ...}: {
home.packages = with pkgs; [obsidian];
wayland.windowManager.hyprland.settings.windowrulev2 = [
"workspace 1, class:^(obsidian)$"
];
}

64
home/programs/office.nix Normal file
View File

@@ -0,0 +1,64 @@
{
pkgs,
config,
...
}: let
catppuccin = {
flavour = "mocha";
accent = "mauve";
socHash = "sha256-c7BIwKlwUpD+rLKQQi43mHi2s/hlNkxPE+eX7iWb2vI=";
};
themeName = "catppuccin-${catppuccin.flavour}-${catppuccin.accent}";
themeUrl = "https://raw.githubusercontent.com/catppuccin/libreoffice/main/themes/${catppuccin.flavour}/${catppuccin.accent}/${themeName}.soc";
themeFile = pkgs.fetchurl {
url = themeUrl;
hash = catppuccin.socHash;
};
in {
home.packages = with pkgs; [libreoffice];
xdg.configFile."libreoffice/4/user/config/catppuccin-mocha-mauve.soc" = {
source = themeFile;
executable = false;
};
# https://github.com/catppuccin/libreoffice/blob/main/scripts/install_theme.sh (edited for nix)
# home.activation.installCatppuccinLibreofficeTheme = ''
# PATH=${pkgs.lib.makeBinPath [pkgs.gawk pkgs.gnugrep pkgs.findutils pkgs.coreutils pkgs.gettext]}
# echo "Applying Catppuccin theme to LibreOffice..."
# configFile=$(find "${config.xdg.configHome}/libreoffice" -path '*/user/registrymodifications.xcu' -print -quit)
# if [[ -z "$configFile" || ! -f "$configFile" ]]; then
# echo "LibreOffice registrymodifications.xcu not found. Skipping."
# exit 0
# fi
# echo "Found config at: $configFile"
# if grep -q 'oor:name="${themeName}"' "$configFile"; then
# echo "Theme '${themeName}' is already installed. Nothing to do."
# exit 0
# fi
# echo "Injecting theme '${themeName}' into $configFile..."
# gawk -i inplace -v themePath="${themeFile}" '
# BEGIN {
# while ((getline line < themePath) > 0) {
# themeContent = themeContent line "\n"
# }
# close(themePath)
# }
# /<\/oor:items>/ {
# printf "%s", themeContent
# }
# { print }
# ' "$configFile"
# echo "Successfully applied theme."
# '';
}

View File

@@ -0,0 +1,11 @@
{pkgs, ...}: {
home.packages = with pkgs; [
overskride
];
wayland.windowManager.hyprland.settings.windowrulev2 = map (rule: "${rule}, class:^(io.github.kaii_lb.Overskride)$") [
"float"
"size 850 650"
"center"
];
}

View File

@@ -0,0 +1,22 @@
{pkgs, ...}: {
home.packages = with pkgs; [qbittorrent];
xdg.mimeApps = {
enable = true;
defaultApplications = {
"x-scheme-handler/magnet" = ["org.qbittorrent.qBittorrent.desktop"];
};
};
programs.firefox.policies.Handlers = {
schemes.magnet = {
action = "useHelperApp";
handlers = [
{
name = "qBittorrent";
path = "${pkgs.qbittorrent}/share/application/org.qbittorrent.qBittorrent.desktop";
}
];
};
};
}

123
home/programs/rofi.nix Normal file
View File

@@ -0,0 +1,123 @@
{config, ...}: {
wayland.windowManager.hyprland.settings = {
bind = [
"SUPER, Space, exec, rofi -show drun -show-icons"
];
windowrulev2 = map (rule: "${rule}, class:^(Rofi)$") [
"float"
"dimaround"
"pin"
"stayfocused"
"persistentsize"
"decorate 0"
"center 1"
];
};
stylix.targets.rofi.enable = false;
programs.rofi = {
enable = true;
extraConfig = {
modi = "drun,run";
display-drun = "drun";
display-run = "run";
};
font = "sans-serif 12";
theme = let
inherit (config.lib.formats.rasi) mkLiteral;
in {
"*" = let
inherit (config.lib.stylix) colors;
in {
bg0 = mkLiteral "#${colors.base00}F2";
bg1 = mkLiteral "#${colors.base01}";
bg2 = mkLiteral "#${colors.base02}";
bg3 = mkLiteral "#${colors.base0E}";
fg0 = mkLiteral "#${colors.base05}";
fg1 = mkLiteral "#${colors.base04}";
fg2 = mkLiteral "#${colors.base03}";
fg3 = mkLiteral "#${colors.base02}";
background-color = mkLiteral "transparent";
text-color = mkLiteral "@fg0";
margin = mkLiteral "0px";
padding = mkLiteral "0px";
spacing = mkLiteral "0px";
};
"window" = {
location = mkLiteral "north";
y-offset = mkLiteral "calc(50% - 176px)";
width = 480;
border-radius = mkLiteral "8px";
background-color = mkLiteral "@bg0";
};
"mainbox".padding = mkLiteral "12px";
"inputbar" = {
background-color = mkLiteral "@bg1";
border-color = mkLiteral "@bg3";
border = mkLiteral "2px";
border-radius = mkLiteral "8px";
padding = mkLiteral "8px 16px";
spacing = mkLiteral "8px";
children = map mkLiteral ["prompt" "entry"];
};
"prompt".text-color = mkLiteral "@fg2";
"entry" = {
placeholder = " Search...";
placeholder-color = mkLiteral "@fg3";
};
"message" = {
margin = mkLiteral "12px 0 0";
border-radius = mkLiteral "8px";
border-color = mkLiteral "@bg2";
background-color = mkLiteral "@bg2";
};
"textbox".padding = mkLiteral "8px 24px";
"listview" = {
background-color = mkLiteral "transparent";
margin = mkLiteral "12px 0 0";
lines = 8;
columns = 1;
fixed-height = true;
};
"element" = {
padding = mkLiteral "8px 16px";
spacing = mkLiteral "8px";
border-radius = mkLiteral "8px";
};
"element normal active".text-color = mkLiteral "@bg3";
"element alternate active".text-color = mkLiteral "@bg3";
"element selected normal, element selected active" = {
text-color = mkLiteral "@bg0";
background-color = mkLiteral "@bg3";
};
"element-icon" = {
size = mkLiteral "1em";
vertical-align = mkLiteral "0.5";
};
"element-text".text-color = mkLiteral "inherit";
};
};
}

View File

@@ -0,0 +1,34 @@
{
inputs,
pkgs,
...
}: let
inherit (inputs) spicetify-nix;
in {
imports = [spicetify-nix.homeManagerModules.default];
programs.spicetify = let
spicePkgs = spicetify-nix.legacyPackages.${pkgs.system};
in {
enable = true;
spotifyLaunchFlags = "--enable-features=UseOzonePlatform --ozone-platform=wayland";
enabledExtensions = with spicePkgs.extensions; [
keyboardShortcut
shuffle
groupSession
fullAlbumDate
showQueueDuration
betterGenres
lastfm
playNext
volumePercentage
allOfArtist
];
};
wayland.windowManager.hyprland.settings.windowrulev2 = [
"workspace 3, class:^(Spotify)$"
];
}

Some files were not shown because too many files have changed in this diff Show More