Merge pull request 'Restructuring' (#1) from blueprint into main

Reviewed-on: Jan/dotfiles#1
This commit is contained in:
Jan 2025-05-28 10:41:38 +00:00
commit e134b3db6e
171 changed files with 1592 additions and 9381 deletions

View File

@ -1,11 +0,0 @@
{ ... }:
{
imports = [
# Import modules
./modules/default.nix
# Import custom packages
./pkgs/default.nix
];
}

792
flake.lock generated
View File

@ -1,88 +1,5 @@
{
"nodes": {
"base16": {
"inputs": {
"fromYaml": "fromYaml"
},
"locked": {
"lastModified": 1745523430,
"narHash": "sha256-EAYWV+kXbwsH+8G/8UtmcunDeKwLwSOyfcmzZUkWE/c=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "58bfe2553d937d8af0564f79d5b950afbef69717",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "base16.nix",
"type": "github"
}
},
"base16-fish": {
"flake": false,
"locked": {
"lastModified": 1622559957,
"narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=",
"owner": "tomyun",
"repo": "base16-fish",
"rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe",
"type": "github"
},
"original": {
"owner": "tomyun",
"repo": "base16-fish",
"type": "github"
}
},
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1736852337,
"narHash": "sha256-esD42YdgLlEh7koBrSqcT7p2fsMctPAcGl/+2sYJa2o=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "03860521c40b0b9c04818f2218d9cc9efc21e7a5",
"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"
}
},
"firefox-gnome-theme": {
"flake": false,
"locked": {
"lastModified": 1744642301,
"narHash": "sha256-5A6LL7T0lttn1vrKsNOKUk9V0ittdW0VEqh6AtefxJ4=",
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"rev": "59e3de00f01e5adb851d824cf7911bd90c31083a",
"type": "github"
},
"original": {
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
@ -99,101 +16,6 @@
"type": "github"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1717312683,
"narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=",
"owner": "nix-community",
"repo": "flake-compat",
"rev": "38fd3954cf65ce6faf3d0d45cd26059e059f07ea",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"locked": {
"lastModified": 1733328505,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1743550720,
"narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "c621e8422220273271f52058f618c94e405bb0f5",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": [
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1733312601,
"narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_3": {
"inputs": {
"nixpkgs-lib": [
"stylix",
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1733312601,
"narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
@ -212,125 +34,16 @@
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"glue": {
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
"path": "./glue",
"type": "path"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_3": {
"inputs": {
"systems": [
"stylix",
"systems"
]
"path": "./glue",
"type": "path"
},
"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"
}
},
"git-hooks": {
"inputs": {
"flake-compat": [
"stylix",
"flake-compat"
],
"gitignore": "gitignore",
"nixpkgs": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1742649964,
"narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"stylix",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gnome-shell": {
"flake": false,
"locked": {
"lastModified": 1732369855,
"narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "dadd58f630eeea41d645ee225a63f719390829dc",
"type": "github"
},
"original": {
"owner": "GNOME",
"ref": "47.2",
"repo": "gnome-shell",
"type": "github"
}
"parent": []
},
"home-manager": {
"inputs": {
@ -339,11 +52,11 @@
]
},
"locked": {
"lastModified": 1746040799,
"narHash": "sha256-osgPX/SzIpkR50vev/rqoTEAVkEcOWXoQXmbzsaI4KU=",
"lastModified": 1748134483,
"narHash": "sha256-5PBK1nV8X39K3qUj8B477Aa2RdbLq3m7wRxUKRtggX4=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "5f217e5a319f6c186283b530f8c975e66c028433",
"rev": "c1e671036224089937e111e32ea899f59181c383",
"type": "github"
},
"original": {
@ -352,136 +65,55 @@
"type": "github"
}
},
"home-manager_2": {
"inputs": {
"nixpkgs": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1746040799,
"narHash": "sha256-osgPX/SzIpkR50vev/rqoTEAVkEcOWXoQXmbzsaI4KU=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "5f217e5a319f6c186283b530f8c975e66c028433",
"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": 1737371634,
"narHash": "sha256-fTVAWzT1UMm1lT+YxHuVPtH+DATrhYfea3B0MxG/cGw=",
"owner": "NuschtOS",
"repo": "ixx",
"rev": "a1176e2a10ce745ff8f63e4af124ece8fe0b1648",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"ref": "v0.0.7",
"repo": "ixx",
"type": "github"
}
},
"nix-matlab": {
"nix-minecraft": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1746111721,
"narHash": "sha256-Jsn01TrHUZuo2IzeRkcnty+ftBcnHkbtv9NmLwdV9zk=",
"owner": "doronbehar",
"repo": "nix-matlab",
"rev": "07739cc347be4fda69deab66eea68b030e918e89",
"type": "gitlab"
},
"original": {
"owner": "doronbehar",
"repo": "nix-matlab",
"type": "gitlab"
}
},
"nixos-cosmic": {
"inputs": {
"flake-compat": "flake-compat_2",
"nixpkgs": "nixpkgs",
"nixpkgs-stable": "nixpkgs-stable",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1746109800,
"narHash": "sha256-sjDpqdvbQaiA6OAsgLE4niz6hmmCpoUH0cl5zyfu6FI=",
"owner": "lilyinstarlight",
"repo": "nixos-cosmic",
"rev": "9fe1aa7b6a1043003b38f36626dd29b52247d720",
"lastModified": 1747581338,
"narHash": "sha256-/+H9qce+NPsEcAC31s3pbD64nB6GKC3+3ZNLV1+tffk=",
"owner": "Jan-Bulthuis",
"repo": "nix-minecraft",
"rev": "44b6b40d7a3e0a114567b38a203029a5bc67e838",
"type": "github"
},
"original": {
"owner": "lilyinstarlight",
"repo": "nixos-cosmic",
"owner": "Jan-Bulthuis",
"repo": "nix-minecraft",
"type": "github"
}
},
"nix-modpack": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1747559249,
"narHash": "sha256-+ygKEGMVcXNklO4RDYSd5XzydDmQOZWcOcxYZf/PH1U=",
"owner": "Jan-Bulthuis",
"repo": "nix-modpack",
"rev": "a093625c2847afc3ef257513161c7fe318c6be1c",
"type": "github"
},
"original": {
"owner": "Jan-Bulthuis",
"repo": "nix-modpack",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1745930157,
"narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1746055187,
"narHash": "sha256-3dqArYSMP9hM7Qpy5YWhnSjiqniSaT2uc5h2Po7tmg0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3e362ce63e16b9572d8c2297c04f7c19ab6725a5",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1746061036,
"narHash": "sha256-OxYwCGJf9VJ2KnUO+w/hVJVTjOgscdDg/lPv8Eus07Y=",
"lastModified": 1747958103,
"narHash": "sha256-qmmFCrfBwSHoWw7cVK4Aj+fns+c54EBP8cGqp/yK410=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "3afd19146cac33ed242fc0fc87481c67c758a59e",
"rev": "fe51d34885f7b5e3e7b59572796e1bcb427eccb1",
"type": "github"
},
"original": {
@ -491,192 +123,13 @@
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1746061036,
"narHash": "sha256-OxYwCGJf9VJ2KnUO+w/hVJVTjOgscdDg/lPv8Eus07Y=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3afd19146cac33ed242fc0fc87481c67c758a59e",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1745930157,
"narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixvim": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_3",
"nuschtosSearch": "nuschtosSearch"
},
"locked": {
"lastModified": 1746101723,
"narHash": "sha256-loxT2bAglD3w8XDx+7huMXQHbg07yHHHCNiCiVWneqI=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "c91753bbe57781e08226829b9e354facd50caf1b",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixvim",
"type": "github"
}
},
"nur": {
"inputs": {
"flake-parts": "flake-parts_2",
"nixpkgs": [
"nixpkgs"
],
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1746118004,
"narHash": "sha256-E5WQwA602g5qMnZDmgV7EqDAwyg4PqnoeMJAkDD1yak=",
"owner": "nix-community",
"repo": "NUR",
"rev": "9a4aaf927694321aeedfec791dfcc7850f8503cd",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"nur_2": {
"inputs": {
"flake-parts": "flake-parts_3",
"nixpkgs": [
"stylix",
"nixpkgs"
],
"treefmt-nix": "treefmt-nix_2"
},
"locked": {
"lastModified": 1746056780,
"narHash": "sha256-/emueQGaoT4vu0QjU9LDOG5roxRSfdY0K2KkxuzazcM=",
"owner": "nix-community",
"repo": "NUR",
"rev": "d476cd0972dd6242d76374fcc277e6735715c167",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"nuschtosSearch": {
"inputs": {
"flake-utils": "flake-utils_2",
"ixx": "ixx",
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1745046075,
"narHash": "sha256-8v4y6k16Ra/fiecb4DxhsoOGtzLKgKlS+9/XJ9z0T2I=",
"owner": "NuschtOS",
"repo": "search",
"rev": "066afe8643274470f4a294442aadd988356a478f",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"repo": "search",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"glue": "glue",
"home-manager": "home-manager",
"nix-matlab": "nix-matlab",
"nixos-cosmic": "nixos-cosmic",
"nixpkgs": "nixpkgs_2",
"nixvim": "nixvim",
"nur": "nur",
"stylix": "stylix"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"nixos-cosmic",
"nixpkgs"
]
},
"locked": {
"lastModified": 1746067100,
"narHash": "sha256-6JeEbboDvRjLwB9kzCnmWj+f+ZnMtKOe5c2F1VBpaTs=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "026e8fedefd6b167d92ed04b195c658d95ffc7a5",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"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-compat": "flake-compat_3",
"flake-utils": "flake-utils_3",
"git-hooks": "git-hooks",
"gnome-shell": "gnome-shell",
"home-manager": "home-manager_2",
"nixpkgs": "nixpkgs_4",
"nur": "nur_2",
"systems": "systems_3",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes",
"tinted-tmux": "tinted-tmux",
"tinted-zed": "tinted-zed"
},
"locked": {
"lastModified": 1746111784,
"narHash": "sha256-94MEscICizhXBJvP5o6f9lcY2vWXTSg1XKZZbS19Yso=",
"owner": "danth",
"repo": "stylix",
"rev": "716e6669a9840e4ba0d8deb6ab1d016ef01c475a",
"type": "github"
},
"original": {
"owner": "danth",
"repo": "stylix",
"type": "github"
"nix-minecraft": "nix-minecraft",
"nix-modpack": "nix-modpack",
"nixpkgs": "nixpkgs"
}
},
"systems": {
@ -693,161 +146,6 @@
"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"
}
},
"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": 1716423189,
"narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=",
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "eb39e141db14baef052893285df9f266df041ff8",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "eb39e141db14baef052893285df9f266df041ff8",
"type": "github"
}
},
"tinted-schemes": {
"flake": false,
"locked": {
"lastModified": 1744974599,
"narHash": "sha256-Fg+rdGs5FAgfkYNCs74lnl8vkQmiZVdBsziyPhVqrlY=",
"owner": "tinted-theming",
"repo": "schemes",
"rev": "28c26a621123ad4ebd5bbfb34ab39421c0144bdd",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "schemes",
"type": "github"
}
},
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1745111349,
"narHash": "sha256-udV+nHdpqgkJI9D0mtvvAzbqubt9jdifS/KhTTbJ45w=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "e009f18a01182b63559fb28f1c786eb027c3dee9",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-tmux",
"type": "github"
}
},
"tinted-zed": {
"flake": false,
"locked": {
"lastModified": 1725758778,
"narHash": "sha256-8P1b6mJWyYcu36WRlSVbuj575QWIFZALZMTg5ID/sM4=",
"owner": "tinted-theming",
"repo": "base16-zed",
"rev": "122c9e5c0e6f27211361a04fae92df97940eccf9",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-zed",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1733222881,
"narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "49717b5af6f80172275d47a418c9719a31a78b53",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"treefmt-nix_2": {
"inputs": {
"nixpkgs": [
"stylix",
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1733222881,
"narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "49717b5af6f80172275d47a418c9719a31a78b53",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
}
},
"root": "root",

View File

@ -1,88 +1,16 @@
{
description = "NixOS system";
description = "System configuration for NixOS";
inputs = {
glue.url = "./glue";
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix.url = "github:danth/stylix";
nixvim.url = "github:nix-community/nixvim";
nur = {
url = "github:nix-community/NUR";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-matlab = {
url = "gitlab:doronbehar/nix-matlab";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-utils.url = "github:numtide/flake-utils";
nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic";
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
nix-minecraft.url = "github:Jan-Bulthuis/nix-minecraft";
nix-minecraft.inputs.nixpkgs.follows = "nixpkgs";
nix-modpack.url = "github:Jan-Bulthuis/nix-modpack";
nix-modpack.inputs.nixpkgs.follows = "nixpkgs";
};
outputs =
{
self,
nixpkgs,
home-manager,
stylix,
nixvim,
nur,
nix-matlab,
nixos-cosmic,
...
}:
let
mkConfig =
system: machineConfig: userConfig:
(nixpkgs.lib.nixosSystem {
inherit system;
specialArgs = { inherit system; };
modules = [
machineConfig
home-manager.nixosModules.home-manager
{
nix.settings = {
substituters = [ "https://cosmic.cachix.org/" ];
trusted-public-keys = [ "cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE=" ];
};
machine.users = userConfig;
home-manager.extraSpecialArgs = { inherit system; };
home-manager.sharedModules = [
stylix.homeManagerModules.stylix
nixvim.homeManagerModules.nixvim
nur.modules.homeManager.default
{
nixpkgs.overlays = [
nix-matlab.overlay
nixos-cosmic.overlays.default
];
}
];
}
];
});
in
{
nixosConfigurations = {
"20212060" = mkConfig "x86_64-linux" ./machines/laptop.nix {
jan = {
sudo = true;
configuration = ./users/jan.nix;
};
berg-van-abstractie = {
sudo = false;
configuration = ./users/comp-prog.nix;
};
};
"vm-audio" = mkConfig "x86_64-linux" ./machines/vm-audio.nix {
local = {
sudo = true;
configuration = ./users/server.nix;
};
};
};
lib = import ./shell-modules/default.nix self.inputs;
};
outputs = inputs: inputs.glue inputs;
}

14
glue/flake.nix Normal file
View File

@ -0,0 +1,14 @@
{
description = "Some glue";
inputs = { };
outputs =
inputs:
let
glue = import ./lib { inherit inputs; };
in
{
__functor = _: glue;
};
}

173
glue/lib/default.nix Normal file
View File

@ -0,0 +1,173 @@
{ ... }:
let
mkGlue =
inputs:
let
flake = inputs.self;
nixpkgs = inputs.nixpkgs;
lib = nixpkgs.lib;
importDir =
path: fn:
let
entries = builtins.readDir path;
# Get paths to directories
dirs = lib.filterAttrs (_: type: type == "directory") entries;
dirPaths = lib.mapAttrs (name: type: {
path = "${path}/${name}";
type = type;
}) dirs;
# Get paths to nix files
nixName = name: builtins.match "(.*)\\.nix" name;
files = lib.filterAttrs (name: type: (type != "directory") && ((nixName name) != null)) entries;
filePaths = lib.mapAttrs' (name: type: {
name = builtins.head (nixName name);
value = {
path = "${path}/${name}";
type = type;
};
}) files;
combined = dirPaths // filePaths;
in
fn (lib.optionalAttrs (builtins.pathExists path) combined);
# Split out into getNixFiles, getNixFilesRecursive, getDirs
importDirRecursive =
path: fn:
let
entries = importDir path lib.id;
# Dig down recursively
dirs = lib.filterAttrs (_: entry: entry.type == "directory") entries;
recursedEntries = lib.mapAttrs (name: entry: (importDirRecursive entry.path lib.id)) dirs;
in
fn (entries // recursedEntries);
eachSystem = fn: lib.genAttrs lib.systems.flakeExposed fn;
systemArgs = eachSystem (system: {
pkgs = (
import inputs.nixpkgs {
inherit system;
}
);
});
allPackages = importDir "${flake}/packages" (
attrs:
lib.mapAttrs (
name: entry: (if entry.type == "directory" then "${entry.path}/default.nix" else entry.path)
) attrs
);
packages =
let
# TODO: Filter out packages that are not supported on the platform?
mkPackages =
system:
let
args = systemArgs."${system}";
pkgs = args.pkgs;
in
lib.mapAttrs (name: package: pkgs.callPackage package { }) allPackages;
in
eachSystem mkPackages;
overlay = final: prev: (lib.mapAttrs (name: package: prev.callPackage package { }) allPackages);
collectEntries =
attrs:
lib.attrsets.collect (
entry: (lib.isAttrs entry) && (lib.hasAttr "path" entry) && (lib.hasAttr "type" entry)
) attrs;
collectModules =
path:
importDirRecursive path (
attrs:
map (entry: if entry.type == "directory" then entry.path + "/default.nix" else entry.path) (
collectEntries attrs
)
);
nixosModules = collectModules "${flake}/modules/nixos";
inputNixosModules = lib.map (flake: flake.outputs.nixosModules.default) (
lib.filter (flake: lib.hasAttrByPath [ "outputs" "nixosModules" "default" ] flake) (
lib.attrValues inputs
)
);
homeModules = collectModules "${flake}/modules/home";
inputHomeModules = lib.map (flake: flake.outputs.homeManagerModules.default) (
lib.filter (flake: lib.hasAttrByPath [ "outputs" "homeManagerModules" "default" ] flake) (
lib.attrValues inputs
)
);
inputOverlays = lib.map (flake: flake.outputs.overlays.default) (
lib.filter (flake: lib.hasAttrByPath [ "outputs" "overlays" "default" ] flake) (
lib.attrValues inputs
)
);
overlayModule =
{ ... }:
{
nixpkgs.overlays = [ overlay ] ++ inputOverlays;
};
nixosConfigurations = importDir "${flake}/hosts" (
attrs:
lib.mapAttrs (
name: entry:
lib.nixosSystem {
specialArgs = {
inherit inputs;
};
modules =
let
systemPath = "${entry.path}/configuration.nix";
userEntries = importDir "${entry.path}/users" lib.id;
usersConfiguration = lib.mapAttrs (name: entry: {
isNormalUser = true;
group = name;
}) userEntries;
groupsConfiguration = lib.mapAttrs (name: entry: {
}) userEntries;
homesConfiguration = lib.mapAttrs (name: entry: entry.path) userEntries;
usersModule =
{ ... }:
{
home-manager.sharedModules = homeModules ++ inputHomeModules;
home-manager.useUserPackages = false; # TODO: See if this should be changed to true?
home-manager.useGlobalPkgs = true;
home-manager.users = homesConfiguration;
users.users = usersConfiguration;
users.groups = groupsConfiguration;
};
in
[
systemPath
overlayModule
usersModule
]
++ nixosModules
++ inputNixosModules;
}
) (lib.attrsets.filterAttrs (name: entry: entry.type == "directory") attrs)
);
in
{
inherit packages nixosConfigurations;
overlays.default = overlay;
};
in
mkGlue

View File

@ -0,0 +1,35 @@
{ flake, ... }:
{
# State version
system.stateVersion = "24.05";
# Machine hostname
networking.hostName = "20212060";
# Admin users
users.users.jan.extraGroups = [ "wheel" ];
# Enable virtualisation for VMs
virtualisation.libvirtd.enable = true;
# Set up wstunnel client
services.wstunnel = {
enable = true;
clients.wg-tunnel = {
connectTo = "wss://tunnel.bulthuis.dev:443";
localToRemote = [
"udp://51820:10.10.40.100:51820"
];
};
};
# Module setup
modules = {
profiles.laptop.enable = true;
};
imports = [
./hardware-configuration.nix
];
}

View File

@ -0,0 +1,43 @@
{ ... }:
{
# Machine platform
nixpkgs.hostPlatform = "x86_64-linux";
# Hardware configuration
hardware.enableRedistributableFirmware = true;
boot.initrd.availableKernelModules = [
"xhci_pci"
"nvme"
"usb_storage"
"sd_mod"
"rtsx_pci_sdmmc"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
hardware.cpu.intel.updateMicrocode = true;
# Filesystems
fileSystems."/" = {
device = "/dev/disk/by-uuid/3b91eaeb-ea95-4bea-8dc1-f55af7502d23";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/46BF-DE2C";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
# Swapfile
swapDevices = [
{
device = "/var/lib/swapfile";
size = 16 * 1024;
}
];
}

View File

@ -0,0 +1,9 @@
{
...
}:
{
home.stateVersion = "24.11";
modules.profiles.jan.enable = true;
}

View File

@ -0,0 +1,241 @@
{
lib,
pkgs,
config,
...
}:
{
# State version
system.stateVersion = "24.11";
# Machine hostname
networking.hostName = "vm-audio";
# Enabled modules
modules = {
profiles.vm.enable = true;
sound.enable = true;
# spotifyd.enable = true; # TODO: Add this as a local module
};
# Install system packages
environment.systemPackages = with pkgs; [
carla
xpra
alsa-utils
pulsemixer
adwaita-icon-theme
open-stage-control
carla_osc_bridge
# Add LV2 plugins
lsp-plugins
airwindows-lv2
distrho-ports
cardinal
calf
];
# Setup firewall
networking.firewall = {
allowedTCPPorts = [
8080
10402
15151
22752
];
allowedUDPPorts = [
8080
10402
15151
22752
];
};
# Setup dependencies
environment.variables.LD_LIBRARY_PATH = lib.mkForce "${lib.makeLibraryPath (
with pkgs;
[
cairo
pipewire.jack
]
)}";
qt = {
enable = true;
style = "adwaita";
};
xdg.icons = {
enable = true;
fallbackCursorThemes = [ "Adwaita" ];
};
hardware.graphics.enable = true;
# User for audio mixing
users.users.mixer = {
isNormalUser = true;
group = "mixer";
extraGroups = [ "systemd-journal" ];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKxoQSxfYqf9ITN8Fhckk8WbY4dwtBAXOhC9jxihJvq jan@bulthuis.dev"
];
};
users.groups.mixer = { };
users.groups.audio = {
members = [
"mixer"
];
};
users.groups.bluetooth = {
members = [
"mixer"
];
};
# Xpra service
systemd.user.services.xpra = {
description = "Xpra Service";
wantedBy = [ "default.target" ];
after = [
"network.target"
];
unitConfig = {
ConditionUser = "mixer";
};
serviceConfig = {
ExecStart = "${pkgs.xpra}/bin/xpra start :7 --bind-tcp=0.0.0.0:15151 --daemon=no";
Restart = "always";
RestartSec = 5;
};
};
# Carla service
systemd.user.services.carla = {
description = "Carla Service";
wantedBy = [ "default.target" ];
after = [
"network.target"
"sound.target"
];
requires = [
"xpra.service"
];
unitConfig = {
ConditionUser = "mixer";
};
serviceConfig = {
ExecStart = "${pkgs.carla}/bin/carla /home/mixer/Default.carxp -platform xcb";
Environment = "\"DISPLAY=:7\"";
Restart = "always";
RestartSec = 5;
};
};
# Carla service
systemd.user.services.carla-bridge = {
description = "Carla OSC Bridge";
wantedBy = [ "default.target" ];
after = [
"network.target"
"sound.target"
];
requires = [
"carla.service"
];
unitConfig = {
ConditionUser = "mixer";
};
serviceConfig = {
ExecStart = "${pkgs.carla_osc_bridge}/bin/carla_osc_bridge --clients \"127.0.0.1:8080\"";
Restart = "always";
RestartSec = 5;
};
};
# Open stage control service
systemd.user.services.osc = {
description = "OSC Service";
wantedBy = [ "default.target" ];
after = [
"network.target"
];
requires = [
"carla.service"
];
unitConfig = {
ConditionUser = "mixer";
};
serviceConfig = {
ExecStart = "${pkgs.open-stage-control}/bin/open-stage-control --no-gui --send 127.0.0.1:10402 --load /home/mixer/open-stage-control/session.json --theme /home/mixer/open-stage-control/theme.css";
Environment = "\"ELECTRON_RUN_AS_NODE=1\"";
Restart = "always";
RestartSec = 5;
};
};
# Create bluetooth A2DP source
hardware.bluetooth = {
enable = true;
disabledPlugins = [ "hostname" ];
settings.General = {
Name = "Linox";
Class = "0x240414";
DiscoverableTimeout = 0;
AlwaysPairable = true;
PairableTimeout = 0;
FastConnectable = true;
JustWorksRepairing = "always";
};
};
services.pipewire.wireplumber.extraConfig."50-bluetooth-a2dp" = {
"monitor.bluez.properties" = {
"bluez5.roles" = [ "a2dp_source" ];
};
};
# Create null sinks
services.pipewire.extraConfig.pipewire."91-null-sinks" = {
"context.objects" = [
{
factory = "adapter";
args = {
"factory.name" = "support.null-audio-sink";
"node.name" = "Speaker-Proxy";
"node.description" = "Proxy for Speaker Output";
"media.class" = "Audio/Sink";
"audio.position" = "L,R";
};
}
{
factory = "adapter";
args = {
"factory.name" = "support.null-audio-sink";
"node.name" = "Headphone-Proxy";
"node.description" = "Proxy for Headphone Output";
"media.class" = "Audio/Sink";
"audio.position" = "L,R";
};
}
{
factory = "adapter";
args = {
"factory.name" = "support.null-audio-sink";
"node.name" = "SpotifyD-Proxy";
"node.description" = "Proxy for SpotifyD";
"media.class" = "Audio/Sink";
"audio.position" = "L,R";
};
}
{
factory = "adapter";
args = {
"factory.name" = "support.null-audio-sink";
"node.name" = "AnalogIn-Proxy";
"node.description" = "Proxy for the analog input";
"media.class" = "Audio/Source/Virtual";
"audio.position" = "L,R";
};
}
];
};
}

View File

@ -0,0 +1,7 @@
{ ... }:
{
home.stateVersion = "24.11";
modules.profiles.base.enable = true;
}

View File

@ -0,0 +1,42 @@
{
lib,
pkgs,
config,
...
}:
{
# State version
system.stateVersion = "24.11";
# Machine hostname
networking.hostName = "vm-vpn";
# Enabled modules
modules = {
profiles.vm.enable = true;
};
# Setup wstunnel server
services.wstunnel = {
enable = true;
servers.wg-tunnel = {
enableHTTPS = true;
listen = {
host = "0.0.0.0";
port = 8080;
};
restrictTo = [
{
host = "10.10.40.100";
port = 51820;
}
];
tlsCertificate = "/var/lib/secrets/fullchain.pem";
tlsKey = "/var/lib/secrets/key.pem";
};
};
networking.firewall = {
allowedTCPPorts = [ 8080 ];
};
}

View File

@ -0,0 +1,7 @@
{ ... }:
{
home.stateVersion = "24.11";
modules.profiles.base.enable = true;
}

View File

@ -1,63 +0,0 @@
{ lib, ... }:
{
imports = [
# Import environment
../default.nix
];
config = {
# State version
system.stateVersion = "24.05";
# Machine hostname
networking.hostName = "20212060";
# Enabled modules
modules = {
base.desktop.enable = true;
bluetooth.enable = true;
power-saving.enable = false;
networkmanager.enable = true;
grdp.enable = true;
printing.enable = true;
};
# Hardware configuration
hardware.enableRedistributableFirmware = true;
boot.initrd.availableKernelModules = [
"xhci_pci"
"nvme"
"usb_storage"
"sd_mod"
"rtsx_pci_sdmmc"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
hardware.cpu.intel.updateMicrocode = true;
# Filesystems
fileSystems."/" = {
device = "/dev/disk/by-uuid/3b91eaeb-ea95-4bea-8dc1-f55af7502d23";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/46BF-DE2C";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
# Swapfile
swapDevices = [
{
device = "/var/lib/swapfile";
size = 16 * 1024;
}
];
};
}

View File

@ -1,244 +0,0 @@
{
lib,
pkgs,
config,
...
}:
{
imports = [
# Import environment
./vm-base.nix
];
config = {
# Machine hostname
networking.hostName = "vm-audio";
# Enabled modules
modules = {
pipewire.enable = true;
spotifyd.enable = true;
};
# Install system packages
environment.systemPackages = with pkgs; [
carla
xpra
alsa-utils
pulsemixer
adwaita-icon-theme
open-stage-control
carla_osc_bridge
# Add LV2 plugins
lsp-plugins
airwindows-lv2
distrho-ports
cardinal
calf
];
# Setup firewall
networking.firewall = {
allowedTCPPorts = [
8080
10402
15151
22752
];
allowedUDPPorts = [
8080
10402
15151
22752
];
};
# Setup dependencies
environment.variables.LD_LIBRARY_PATH = lib.mkForce "${lib.makeLibraryPath (
with pkgs;
[
cairo
pipewire.jack
]
)}";
qt = {
enable = true;
style = "adwaita";
};
xdg.icons = {
enable = true;
fallbackCursorThemes = [ "Adwaita" ];
};
hardware.graphics.enable = true;
# User for audio mixing
users.users.mixer = {
isNormalUser = true;
group = "mixer";
extraGroups = [ "systemd-journal" ];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKxoQSxfYqf9ITN8Fhckk8WbY4dwtBAXOhC9jxihJvq jan@bulthuis.dev"
];
};
users.groups.mixer = { };
users.groups.audio = {
members = [
"mixer"
];
};
users.groups.bluetooth = {
members = [
"mixer"
];
};
# Xpra service
systemd.user.services.xpra = {
description = "Xpra Service";
wantedBy = [ "default.target" ];
after = [
"network.target"
];
unitConfig = {
ConditionUser = "mixer";
};
serviceConfig = {
ExecStart = "${pkgs.xpra}/bin/xpra start :7 --bind-tcp=0.0.0.0:15151 --daemon=no";
Restart = "always";
RestartSec = 5;
};
};
# Carla service
systemd.user.services.carla = {
description = "Carla Service";
wantedBy = [ "default.target" ];
after = [
"network.target"
"sound.target"
];
requires = [
"xpra.service"
];
unitConfig = {
ConditionUser = "mixer";
};
serviceConfig = {
ExecStart = "${pkgs.carla}/bin/carla /home/mixer/Default.carxp -platform xcb";
Environment = "\"DISPLAY=:7\"";
Restart = "always";
RestartSec = 5;
};
};
# Carla service
systemd.user.services.carla-bridge = {
description = "Carla OSC Bridge";
wantedBy = [ "default.target" ];
after = [
"network.target"
"sound.target"
];
requires = [
"carla.service"
];
unitConfig = {
ConditionUser = "mixer";
};
serviceConfig = {
ExecStart = "${pkgs.carla_osc_bridge}/bin/carla_osc_bridge --clients \"127.0.0.1:8080\"";
Restart = "always";
RestartSec = 5;
};
};
# Open stage control service
systemd.user.services.osc = {
description = "OSC Service";
wantedBy = [ "default.target" ];
after = [
"network.target"
];
requires = [
"carla.service"
];
unitConfig = {
ConditionUser = "mixer";
};
serviceConfig = {
ExecStart = "${pkgs.open-stage-control}/bin/open-stage-control --no-gui --send 127.0.0.1:10402 --load /home/mixer/open-stage-control/session.json --theme /home/mixer/open-stage-control/theme.css";
Environment = "\"ELECTRON_RUN_AS_NODE=1\"";
Restart = "always";
RestartSec = 5;
};
};
# Create bluetooth A2DP source
hardware.bluetooth = {
enable = true;
disabledPlugins = [ "hostname" ];
settings.General = {
Name = "Linox";
Class = "0x240414";
DiscoverableTimeout = 0;
AlwaysPairable = true;
PairableTimeout = 0;
FastConnectable = true;
JustWorksRepairing = "always";
};
};
services.pipewire.wireplumber.extraConfig."50-bluetooth-a2dp" = {
"monitor.bluez.properties" = {
"bluez5.roles" = [ "a2dp_source" ];
};
};
# Create null sinks
services.pipewire.extraConfig.pipewire."91-null-sinks" = {
"context.objects" = [
{
factory = "adapter";
args = {
"factory.name" = "support.null-audio-sink";
"node.name" = "Speaker-Proxy";
"node.description" = "Proxy for Speaker Output";
"media.class" = "Audio/Sink";
"audio.position" = "L,R";
};
}
{
factory = "adapter";
args = {
"factory.name" = "support.null-audio-sink";
"node.name" = "Headphone-Proxy";
"node.description" = "Proxy for Headphone Output";
"media.class" = "Audio/Sink";
"audio.position" = "L,R";
};
}
{
factory = "adapter";
args = {
"factory.name" = "support.null-audio-sink";
"node.name" = "SpotifyD-Proxy";
"node.description" = "Proxy for SpotifyD";
"media.class" = "Audio/Sink";
"audio.position" = "L,R";
};
}
{
factory = "adapter";
args = {
"factory.name" = "support.null-audio-sink";
"node.name" = "AnalogIn-Proxy";
"node.description" = "Proxy for the analog input";
"media.class" = "Audio/Source/Virtual";
"audio.position" = "L,R";
};
}
];
};
};
}

View File

@ -1,60 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.base;
in
{
options.modules.base = {
enable = mkEnableOption "base";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
# Add base linux utilities
git
wget
curl
dig
procps
wireguard-tools
usbutils
pciutils
zip
unzip
];
modules = {
# Enable base modules
clean-tmp.enable = true;
neovim.enable = true;
systemd-boot.enable = true;
};
# TODO: Remove everything below, it is here out of convenience and should be elsewhere
# networking.nameservers = [
# "9.9.9.9"
# "149.112.112.112"
# ];
# programs.captive-browser.enable = true;
services.resolved = {
enable = true;
};
networking.firewall.enable = true;
modules.unfree.enable = true;
nix.settings.experimental-features = "nix-command flakes";
nixpkgs.hostPlatform = "x86_64-linux";
console.packages = [
pkgs.dina-psfu
];
console.font = "dina";
console.earlySetup = true;
boot.loader.timeout = 0;
};
}

View File

@ -1,93 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.base.desktop;
in
{
options.modules.base.desktop = {
enable = mkEnableOption "desktop";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
# TODO: MOVE
quickemu # TODO: Reenable once building this is fixed
pdftk
# TODO: Move to USB module
# usbutils
# udiskie
# udisks
brightnessctl
wireshark
];
# Move to Realm module
security.krb5 = {
enable = true;
settings = {
libdefaults = {
rdns = false;
};
realms = {
"GEWISWG.GEWIS.NL" = {
kdc = [
"https://gewisvdesktop.gewis.nl/KdcProxy"
];
};
};
};
};
modules = {
# Enable base modules
base.enable = true;
fontconfig.enable = true;
nixgreety.enable = true;
pipewire.enable = true;
graphics.enable = true;
};
programs.dconf.enable = true;
services.libinput.enable = true;
networking.firewall = {
enable = true;
logRefusedConnections = true;
logRefusedPackets = true;
logReversePathDrops = true;
logRefusedUnicastsOnly = false;
};
programs.wireshark.enable = true;
machine.sudo-groups = [ "wireshark" ];
services.upower.enable = true; # For battery percentage in gnome
modules.unfree.allowedPackages = [
"nvidia-x11"
"nvidia-settings"
];
networking.firewall.allowedTCPPortRanges = [
{
from = 10000;
to = 11000;
}
];
networking.firewall.allowedUDPPortRanges = [
{
from = 10000;
to = 11000;
}
];
security.rtkit.enable = true;
security.polkit.enable = true;
# TODO: Move to USB module
# services.gvfs.enable = true;
services.udisks2.enable = true;
};
}

View File

@ -1,23 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.bluetooth;
in
{
options.modules.bluetooth = {
enable = mkEnableOption "bluetooth";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [ bluez ];
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
};
}

View File

@ -1,18 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.clean-tmp;
in
{
options.modules.clean-tmp = {
enable = mkEnableOption "clean-tmp";
};
config = mkIf cfg.enable { boot.tmp.cleanOnBoot = true; };
}

View File

@ -1,37 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.silent-boot;
in
{
options.modules.silent-boot = {
enable = mkEnableOption "silent-boot";
};
config = mkIf cfg.enable {
boot = {
loader.timeout = 0;
consoleLogLevel = 0;
initrd.verbose = false;
initrd.checkJournalingFS = false;
kernelParams = [
"quiet"
"boot.shell_on_fail"
"loglevel=3"
"rd.systemd.show_status=false"
"rd.udev.log_level=3"
"udev.log_priority=3"
"video=efifb:nobgrt"
"bgrt_disable"
];
};
};
}

View File

@ -1,18 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.modules.brightnessctl;
in
{
options.modules.brightnessctl = {
enable = mkEnableOption "brightnessctl";
};
config = mkIf cfg.enable { environment.systemPackages = [ pkgs.brightnessctl ]; };
}

View File

@ -1,39 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
{
imports = [
# Import modules
./base/default.nix
./base/desktop.nix
./bluetooth/default.nix
./boot/clean-tmp.nix
./boot/silent-boot.nix
./boot/systemd-boot.nix
./brightnessctl/default.nix
./fontconfig/default.nix
./graphics/default.nix
./grdp/default.nix
./greeter/greetd/default.nix
./greeter/greetd/nixgreety.nix
./greeter/greetd/tuigreet.nix
./greeter/ly/default.nix
./locale/default.nix
./neovim/default.nix
./networkmanager/default.nix
./power-saving/default.nix
./printing/default.nix
./sound/pipewire.nix
./spotifyd/default.nix
./ssh/default.nix
./users/default.nix
./unfree/default.nix
./vpn/tailscale.nix
./wifi/wpa_supplicant.nix
];
}

View File

@ -1,27 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.fontconfig;
in
{
options.modules.fontconfig = {
enable = mkEnableOption "fontconfig";
};
config = {
fonts.fontconfig.enable = cfg.enable;
fonts.enableDefaultPackages = false;
fonts.fontconfig.defaultFonts = {
serif = mkDefault [ ];
sansSerif = mkDefault [ ];
monospace = mkDefault [ ];
emoji = mkDefault [ ];
};
};
}

View File

@ -1,39 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.fontconfig;
in
{
options.modules.graphics = {
enable = mkEnableOption "graphics";
};
config = mkIf cfg.enable {
# TODO: Modularize further, especially modesetting should be its own module.
# Set up graphics
hardware.graphics.enable32Bit = true;
hardware.graphics.enable = true;
services.xserver.videoDrivers = [ "nvidia" ];
hardware.nvidia = {
modesetting.enable = true;
powerManagement.enable = false;
powerManagement.finegrained = false;
open = false;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.beta;
prime = {
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0";
offload = {
enable = true;
enableOffloadCmd = true;
};
};
};
};
}

View File

@ -1,50 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib;
{
options.modules.grdp = {
enable = mkEnableOption "grdp";
};
config = mkIf config.modules.grdp.enable {
services.gnome.gnome-remote-desktop.enable = true;
environment.systemPackages = with pkgs; [
gnome-remote-desktop
gnome-control-center
gnome-session
gnome-shell
gnome-settings-daemon
gdm
];
systemd.services."gnome-remote-desktop".wantedBy = [ "graphical.target" ];
networking.firewall = {
allowedTCPPorts = [ 3389 ];
allowedUDPPorts = [ 3389 ];
};
services.xserver.displayManager.gdm.enable = true;
modules.greetd.enable = mkForce false;
# security.polkit.extraConfig = ''
# polkit.addRule(function(action, subject) {
# if (action.id == "org.gnome.controlcenter.remote-session-helper" &&
# subject.isInGroup("wheel")) {
# return polkit.Result.YES;
# }
# });'';
# programs.dconf.profiles.user.databases = [
# {
# settings = with lib.gvariant; {
# "org/gnome/desktop/remote-desktop/rdp" = {
# enable = true;
# view-only = false;
# };
# };
# }
# ];
};
}

View File

@ -1,31 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.modules.greetd;
in
{
options.modules.greetd = {
enable = mkEnableOption "greetd";
command = mkOption {
type = types.str;
default = "";
description = "Command to run to show greeter.";
};
};
config = mkIf cfg.enable {
services.greetd = {
enable = true;
settings.default_session = {
command = cfg.command;
user = mkDefault "greeter";
};
};
};
}

View File

@ -1,30 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.modules.nixgreety;
in
{
options.modules.nixgreety = {
enable = mkEnableOption "nixgreety";
};
config = mkIf cfg.enable {
# Enable greetd
modules.greetd = {
enable = true;
command = "${pkgs.nixgreety}/bin/nixgreety";
};
services.greetd.settings.default_session.user = "root";
environment.systemPackages = with pkgs; [
nixgreety
];
};
}

View File

@ -1,37 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.modules.tuigreet;
in
{
options.modules.tuigreet = {
enable = mkEnableOption "tuigreet";
greeting = mkOption {
type = types.str;
default = "Hewwo! >_< :3";
description = "Greeting message to show.";
};
command = mkOption {
type = types.str;
default = "~/.initrc";
description = "Command to run after logging in.";
};
};
config = mkIf cfg.enable {
# Enable greetd
modules.greetd = {
enable = true;
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --remember --greeting \"${cfg.greeting}\" --time --cmd \"${cfg.command}\" --asterisks";
};
# Enable silent boot to prevent late log messages from messing up tuigreet
modules.silent-boot.enable = true;
};
}

View File

@ -1,30 +0,0 @@
{
config,
lib,
...
}:
with lib;
let
cfg = config.modules.ly;
in
{
options.modules.ly = {
enable = mkEnableOption "ly";
};
config = mkIf cfg.enable {
services.displayManager.ly = {
enable = true;
settings = {
animation = "matrix";
animation_refresh_ms = 32;
box_title = "Hewwo! >_< :3";
clear_password = true;
load = true;
save = true;
xinitrc = "null";
};
};
};
}

View File

@ -0,0 +1,81 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.desktop.gnome;
in
{
options.modules.desktop.gnome = {
enable = mkEnableOption "gnome";
};
config = mkIf cfg.enable {
# TODO: Enable extensions with dconf
home.pointerCursor = {
name = "capitaine-cursors";
size = 24;
package = pkgs.capitaine-cursors;
gtk.enable = true;
x11.enable = true;
};
home.packages =
with pkgs;
[
gnome-session
gnome-shell
gnome-tweaks
gnome-calculator
snapshot
gnome-characters
gnome-connections
blackbox-terminal
baobab
gnome-disk-utility
papers
nautilus
gnome-font-viewer
loupe
gnome-maps
gnome-music
gnome-control-center
gnome-text-editor
showtime
file-roller
mission-center
dconf-editor
# For theming gtk3
adw-gtk3
]
++ (with pkgs.gnomeExtensions; [
gsconnect
disable-workspace-animation
wallpaper-slideshow
media-progress
# luminus-desktop
]);
# Enable and set the gtk themes
gtk = {
enable = true;
gtk3.extraConfig = {
gtk-theme-name = "adw-gtk3";
};
gtk4.extraConfig = {
gtk-theme-name = "Adwaita";
};
};
# Set the theme with dconf
dconf.settings."org/gnome/desktop/interface" = {
gtk-theme = "adw-gtk3";
};
};
}

View File

@ -15,11 +15,6 @@ in
};
config = mkIf cfg.enable {
# Allow unfree
modules.unfree.allowedPackages = [
"vscode-extension-ms-vscode-cpptools"
];
# Gitignore additions
modules.git.ignores = [
".ccls-cache"
@ -48,8 +43,8 @@ in
};
# Neovim configuration
programs.nixvim = {
plugins.lsp.servers.ccls.enable = true;
};
# programs.nixvim = {
# plugins.lsp.servers.ccls.enable = true;
# };
};
}

View File

@ -37,6 +37,6 @@ in
};
# Neovim configuration
programs.nixvim = { };
# programs.nixvim = { };
};
}

View File

@ -33,6 +33,6 @@ in
};
# Neovim configuration
programs.nixvim = { };
# programs.nixvim = { };
};
}

View File

@ -39,6 +39,6 @@ in
};
# Neovim configuration
programs.nixvim = { };
# programs.nixvim = { };
};
}

View File

@ -53,8 +53,8 @@ in
};
# Neovim configuration
programs.nixvim = {
# programs.nixvim = {
};
# };
};
}

View File

@ -27,11 +27,6 @@ in
# Development packages
home.packages = [ ];
# Allow unfree
modules.unfree.allowedPackages = [
"vscode-extension-MS-python-vscode-pylance"
];
# VSCode configuration
programs.vscode = {
profiles.default = {
@ -52,6 +47,6 @@ in
};
# Neovim configuration
programs.nixvim = { };
# programs.nixvim = { };
};
}

View File

@ -50,10 +50,10 @@ in
};
# Neovim configuration
programs.nixvim = {
plugins.rustaceanvim = {
enable = true;
};
};
# programs.nixvim = {
# plugins.rustaceanvim = {
# enable = true;
# };
# };
};
}

View File

@ -39,31 +39,31 @@ in
};
# Neovim configuration
programs.nixvim = {
extraConfigVim = ''
" Enforce latexmk
let g:vimtex_compiler_method = 'latexmk'
# programs.nixvim = {
# extraConfigVim = ''
# " Enforce latexmk
# let g:vimtex_compiler_method = 'latexmk'
" Set latexmk compilation settings
let g:vimtex_compiler_latexmk = {
\ 'options': [
\ '-shell-escape',
\ '-verbose',
\ '-file-line-error',
\ '-synctex=1',
\ '-interaction=nonstopmode',
\ ],
\}
'';
# " Set latexmk compilation settings
# let g:vimtex_compiler_latexmk = {
# \ 'options': [
# \ '-shell-escape',
# \ '-verbose',
# \ '-file-line-error',
# \ '-synctex=1',
# \ '-interaction=nonstopmode',
# \ ],
# \}
# '';
# Vimtex plugin
plugins.vimtex = {
enable = true;
texlivePackage = null;
settings = {
view_method = "zathura";
};
};
};
# # Vimtex plugin
# plugins.vimtex = {
# enable = true;
# texlivePackage = null;
# settings = {
# view_method = "zathura";
# };
# };
# };
};
}

View File

@ -20,10 +20,6 @@ in
};
config = mkIf cfg.enable {
modules.unfree.allowedPackages = [
"mathematica"
];
home.packages = [
my-mathematica
];

View File

@ -0,0 +1,190 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.neovim;
# theme = config.desktop.theming;
# colors = theme.colors;
in
{
options.modules.neovim = {
enable = mkEnableOption "neovim";
};
config = mkIf cfg.enable {
# programs.nixvim = {
# enable = true;
# defaultEditor = true;
# viAlias = true;
# vimAlias = true;
# # extraPackages = with pkgs; [ ];
# opts = {
# number = true;
# relativenumber = true;
# signcolumn = "yes";
# ignorecase = true;
# smartcase = true;
# tabstop = 4;
# shiftwidth = 4;
# softtabstop = 0;
# expandtab = true;
# smarttab = true;
# list = true;
# listchars = "tab:»┈«,trail:·,extends:→,precedes:←,nbsp:␣";
# };
# diagnostic.settings = {
# enable = true;
# signs = true;
# underline = true;
# update_in_insert = true;
# };
# extraConfigLua = ''
# vim.fn.sign_define("DiagnosticSignError",
# {text = "", texthl = "DiagnosticSignError"})
# vim.fn.sign_define("DiagnosticSignWarn",
# {text = "", texthl = "DiagnosticSignWarn"})
# vim.fn.sign_define("DiagnosticSignInfo",
# {text = "", texthl = "DiagnosticSignInfo"})
# vim.fn.sign_define("DiagnosticSignHint",
# {text = "💡", texthl = "DiagnosticSignHint"})
# '';
# keymaps = [
# # Save shortcut
# {
# action = ":update<CR>";
# key = "<C-s>";
# mode = "n";
# }
# {
# action = "<C-o>:update<CR>";
# key = "<C-s>";
# mode = "i";
# }
# # Neo tree
# {
# action = ":Neotree action=focus reveal toggle<CR>";
# key = "<leader>n";
# mode = "n";
# options.silent = true;
# }
# ];
# autoCmd = [
# {
# desc = "Automatic formatting";
# event = "BufWritePre";
# callback = {
# __raw = ''
# function()
# vim.lsp.buf.format {
# async = false,
# }
# end
# '';
# };
# }
# ];
# # highlight = {
# # Comment = {
# # italic = true;
# # fg = theme.schemeColors.withHashtag.base03; # TODO: Come up with a good name colors.muted maybe?
# # };
# # };
# plugins.lsp = {
# enable = true;
# };
# #plugins.treesitter = {
# # enable = true;
# #};
# plugins.cmp = {
# enable = true;
# settings = {
# mapping = {
# "<C-Space>" = "cmp.mapping.complete()";
# "<C-d>" = "cmp.mapping.scroll_docs(-4)";
# "<C-e>" = "cmp.mapping.close()";
# "<C-f>" = "cmp.mapping.scroll_docs(4)";
# "<CR>" = "cmp.mapping.confirm({ select = true })";
# "<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
# "<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
# };
# sources = [
# { name = "path"; }
# { name = "nvim_lsp"; }
# ];
# };
# };
# plugins.web-devicons = {
# enable = true;
# };
# plugins.neo-tree = {
# enable = true;
# closeIfLastWindow = true;
# window = {
# width = 30;
# autoExpandWidth = true;
# };
# extraOptions = {
# default_component_configs.git_status.symbols = {
# # Change type
# added = "+";
# deleted = "✕";
# modified = "✦";
# renamed = "→";
# # Status type
# untracked = "?";
# ignored = "▫";
# unstaged = "□";
# staged = "■";
# conflict = "‼";
# };
# };
# };
# #plugins.cmp-nvim-lsp.enable = true;
# plugins.gitsigns = {
# enable = true;
# settings.current_line_blame = true;
# };
# #plugins.copilot-vim = {
# # enable = true;
# #};
# # plugins.vimtex = {
# # enable = true;
# # texlivePackage = null;
# # settings = {
# # view_method = "zathura";
# # };
# # };
# };
# programs.neovim.defaultEditor = true;
};
}

View File

@ -0,0 +1,99 @@
{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.modules.vscode;
# theme = config.desktop.theming;
in
{
options.modules.vscode = {
enable = mkEnableOption "vscode";
# codeFont = mkOption {
# type = types.anything;
# default = theme.fonts.pkgs."Fira Code";
# };
# fallbackFont = mkOption {
# type = types.anything;
# default = theme.fonts.pkgs."Symbols Nerd Font Mono";
# };
};
config = mkIf cfg.enable {
# TODO: Fix theming
# desktop.theming.fonts.extraFonts = [ cfg.codeFont ];
programs.vscode = {
enable = true;
mutableExtensionsDir = false;
profiles.default = {
extensions = with pkgs.vscode-extensions; [
eamodio.gitlens
ms-vscode.hexeditor
mkhl.direnv
usernamehw.errorlens
gruntfuggly.todo-tree
github.copilot
github.copilot-chat
tomoki1207.pdf
ms-vsliveshare.vsliveshare
ms-vscode-remote.remote-ssh
];
userSettings =
let
# font-family = mkForce "'${cfg.codeFont.name}', '${cfg.fallbackFont.name}'";
# TODO: Move the conversion factor to theme settings
# font-size = mkForce cfg.codeFont.recommendedSize; # Convert pt to px
in
{
# Font setup
# "editor.fontFamily" = font-family;
# "editor.inlayHints.fontFamily" = font-family;
# "editor.inlineSuggest.fontFamily" = font-family;
# "editor.fontSize" = font-size;
# "editor.fontLigatures" = true;
# "terminal.integrated.fontFamily" = font-family;
# "terminal.integrated.fontSize" = font-size;
# "chat.editor.fontFamily" = font-family; # TODO: Change this font to the standard UI font
# "chat.editor.fontSize" = font-size;
# "debug.console.fontFamily" = font-family;
# "debug.console.fontSize" = font-size;
# "scm.inputFontFamily" = font-family; # TODO: Change this font to the standard UI font
# "scm.inputFontSize" = font-size;
# "markdown.preview.fontFamily" = mkForce theme.fonts.sansSerif.name; # TODO: Change this font to the standard UI font
# "markdown.preview.fontSize" = mkForce theme.fonts.sansSerif.recommendedSize;
# Formatting
"editor.formatOnSave" = true;
"editor.tabSize" = 4;
# Layout
"window.menuBarVisibility" = "hidden";
# Git settings
"git.autofetch" = true;
"git.enableSmartCommit" = false;
"git.suggestSmartCommit" = false;
# Disable update notifications
"update.mode" = "none";
# Set themes
"window.autoDetectColorScheme" = true;
# TODO: Move to direnv module
# Ignore direnv folder
"files.exclude" = {
".direnv" = true;
};
};
};
};
};
}

View File

@ -0,0 +1,31 @@
{
pkgs,
lib,
config,
...
}:
with lib;
let
cfg = config.modules.profiles.base;
in
{
options.modules.profiles.base = {
enable = mkEnableOption "Base home-manager profile";
};
config = mkIf cfg.enable {
modules = {
# btop.enable = true;
direnv.enable = true;
fish.enable = true;
# scripts.enable = true;
# Development
# neovim.enable = true;
# Languages
nix.enable = true;
};
};
}

View File

@ -0,0 +1,48 @@
{
pkgs,
lib,
config,
...
}:
with lib;
let
cfg = config.modules.profiles.gnome;
in
{
options.modules.profiles.gnome = {
enable = mkEnableOption "Graphical GNOME environment";
};
config = mkIf cfg.enable {
home.packages = with pkgs; [
firefox # TODO: Move to dediated module
];
modules = {
profiles.base.enable = true;
# Desktop environment
desktop.gnome.enable = true;
# desktop.tiling.enable = true;
# Browser
# firefox = {
# enable = true;
# default = false;
# };
# qutebrowser = {
# enable = true;
# default = true;
# };
# Tools
# obsidian.enable = true;
# zathura.enable = true;
# Development
# neovim.enable = true;
vscode.enable = true;
};
};
}

View File

@ -0,0 +1,86 @@
{
pkgs,
lib,
config,
...
}:
with lib;
let
cfg = config.modules.profiles.jan;
in
{
options.modules.profiles.jan = {
enable = mkEnableOption "Jan's personal profile";
};
config = mkIf cfg.enable {
home.packages = with pkgs; [
libreoffice-still
remmina
thunderbird
signal-desktop
prusa-slicer
freecad-wayland
inkscape
ente-auth
bitwarden
carla
winbox
whatsapp-for-linux
discord
steam
spotify
# feishin # TODO: Fix or replace as insecure
eduvpn-client
river # TODO: Move
ryubing
bottles
prismlauncher
foliate
];
modules = {
profiles.gnome.enable = true;
# Gaming
# retroarch.enable = true;
# ryujinx.enable = true;
# Tools
git = {
enable = true;
user = "Jan-Bulthuis";
email = "git@bulthuis.dev";
# TODO: Move
ignores = [
".envrc"
".direnv"
"flake.nix"
"flake.lock"
];
};
xpra = {
enable = true;
hosts = [
"mixer@10.20.60.251"
];
};
# Development
# docker.enable = true;
# matlab.enable = true;
mathematica.enable = true;
# Languages
haskell.enable = false;
js.enable = true;
nix.enable = true;
rust.enable = true;
python.enable = true;
cpp.enable = true;
tex.enable = true;
jupyter.enable = false;
};
};
}

View File

@ -11,11 +11,17 @@ in
{
options.modules.bash = {
enable = mkEnableOption "bash";
aliases = mkOption {
type = types.attrsOf types.str;
default = {
"..." = "cd ../..";
};
description = "Shell aliases";
};
};
config.programs.bash = {
enable = cfg.enable;
shellAliases = config.modules.shell.aliases;
shellAliases = cfg.aliases;
};
}

View File

@ -0,0 +1,26 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.direnv;
in
{
options.modules.direnv = {
enable = mkEnableOption "direnv";
};
config = mkIf cfg.enable {
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
modules.git.ignores = [
".direnv"
];
};
}

View File

@ -12,12 +12,6 @@ in
{
options.modules.fish = {
enable = mkEnableOption "fish";
plugins = {
done = mkEnableOption "done";
fzf = mkEnableOption "fzf";
grc = mkEnableOption "grc";
};
};
config = mkIf cfg.enable {
@ -36,28 +30,28 @@ in
programs.fish = {
enable = true;
shellAliases = config.modules.shell.aliases;
shellAliases = config.modules.bash.aliases;
plugins = [
(mkIf cfg.plugins.done {
{
name = "done";
src = pkgs.fishPlugins.done.src;
})
(mkIf cfg.plugins.fzf {
}
{
name = "fzf";
src = pkgs.fishPlugins.fzf-fish.src;
})
(mkIf cfg.plugins.grc {
}
{
name = "grc";
src = pkgs.fishPlugins.grc.src;
})
}
];
};
# Fish plugin dependencies
home.packages = with pkgs; [
(mkIf cfg.plugins.fzf fzf)
(mkIf cfg.plugins.grc grc)
fzf
grc
];
};
}

View File

@ -1,14 +0,0 @@
{
lib,
config,
pkgs,
...
}:
{
config = {
time.timeZone = "Europe/Amsterdam";
i18n.defaultLocale = "en_US.UTF-8";
console.keyMap = "us";
};
}

View File

@ -1,23 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.neovim;
in
{
options.modules.neovim = {
enable = mkEnableOption "neovim";
};
config = mkIf cfg.enable {
programs.neovim = {
enable = true;
defaultEditor = true;
};
};
}

View File

@ -1,29 +0,0 @@
{
lib,
config,
...
}:
with lib;
let
cfg = config.modules.networkmanager;
in
{
options.modules.networkmanager = {
enable = mkEnableOption "networkmanager";
};
config = mkIf cfg.enable {
machine.sudo-groups = [ "networkmanager" ];
networking = {
networkmanager = {
enable = true;
wifi.powersave = true;
};
firewall = {
# Fix for wireguard
checkReversePath = false;
};
};
};
}

View File

@ -0,0 +1,18 @@
{ lib, config, ... }:
with lib;
let
cfg = config.modules.bluetooth;
in
{
options.modules.bluetooth = {
enable = mkEnableOption "bluetooth";
};
config = mkIf cfg.enable {
# Enable bluetooth
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
};
};
}

View File

@ -1,21 +1,17 @@
{
lib,
config,
pkgs,
...
}:
{ lib, config, ... }:
with lib;
let
cfg = config.modules.systemd-boot;
cfg = config.modules.bootloader;
in
{
options.modules.systemd-boot = {
enable = mkEnableOption "systemd-boot";
options.modules.bootloader = {
enable = mkEnableOption "bootloader";
};
config = mkIf cfg.enable {
# Bootloader
boot.loader = {
timeout = 0;
systemd-boot.enable = true;
systemd-boot.editor = false;
efi.canTouchEfiVariables = true;

35
modules/nixos/fonts.nix Normal file
View File

@ -0,0 +1,35 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.fonts;
in
{
options.modules.fonts = {
enable = mkEnableOption "fonts";
};
config = mkIf cfg.enable {
console.packages = [
pkgs.dina-psfu
];
console.font = "dina";
console.earlySetup = true;
# TODO: Disable default fonts, fonts should be managed per user
# fonts.enableDefaultPackages = false;
# fonts.fontconfig = {
# enable = true;
# defaultFonts = {
# serif = mkDefault [ ];
# sansSerif = mkDefault [ ];
# monospace = mkDefault [ ];
# emoji = mkDefault [ ];
# };
# };
};
}

79
modules/nixos/gnome.nix Normal file
View File

@ -0,0 +1,79 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.gnome;
in
{
options.modules.gnome = {
enable = mkEnableOption "gnome";
# TODO: Add RDP toggle
};
config = mkIf cfg.enable {
# Enable GDM and Gnome
services.xserver.enable = true;
services.xserver.displayManager.gdm.enable = true;
services.xserver.desktopManager.gnome.enable = true;
services.gnome.core-utilities.enable = false;
services.gnome.games.enable = false;
services.gnome.core-developer-tools.enable = false;
environment.gnome.excludePackages = with pkgs; [
adwaita-icon-theme
(derivation { name = "nixos-background-info"; })
gnome-backgrounds
gnome-bluetooth
gnome-color-manager
gnome-control-center
gnome-shell-extensions
gnome-tour
gnome-user-docs
glib
gnome-menus
gtk3.out
xdg-user-dirs
xdg-user-dirs-gtk
];
# Enable Gnome Remote Desktop
services.gnome.gnome-remote-desktop.enable = true;
systemd.services."gnome-remote-desktop".wantedBy = [ "graphical.target" ];
networking.firewall = {
allowedTCPPorts = [
3389
3390
];
allowedUDPPorts = [
3389
3390
];
};
# For GSConnect/KDE Connect
# TODO: Move to host config?
networking.firewall = {
allowedTCPPortRanges = [
{
from = 1714;
to = 1764;
}
];
allowedUDPPortRanges = [
{
from = 1714;
to = 1764;
}
];
};
# Enable dependencies
modules = {
networkmanager.enable = true;
};
};
}

View File

@ -0,0 +1,22 @@
{ lib, config, ... }:
with lib;
let
cfg = config.modules.graphics;
in
{
options.modules.graphics = {
enable = mkEnableOption "graphics";
# TODO: Add toggle for hybrid graphics
};
config = mkIf cfg.enable {
hardware.graphics.enable = true;
hardware.graphics.enable32Bit = true;
services.xserver.videoDrivers = [ "nvidia" ];
# TODO: Add nvidia settings back in
# TODO: Move to nvidia module
hardware.nvidia = {
open = true;
};
};
}

View File

@ -0,0 +1,15 @@
{ lib, config, ... }:
with lib;
let
cfg = config.modules.networkmanager;
in
{
options.modules.networkmanager = {
enable = mkEnableOption "networkmanager";
};
config = mkIf cfg.enable {
# TODO: Add sudo users to the networkmanager group?
networking.networkmanager.enable = true;
};
}

View File

@ -0,0 +1,20 @@
{ lib, config, ... }:
with lib;
let
cfg = config.modules.power-saving;
in
{
options.modules.power-saving = {
enable = mkEnableOption "power saving";
};
config = mkIf cfg.enable {
# Setup power management
powerManagement.enable = true;
services.thermald.enable = true;
services.power-profiles-daemon.enable = true;
# Enable wifi power saving
networking.networkmanager.wifi.powersave = true;
};
}

View File

@ -1,8 +1,4 @@
{
lib,
config,
...
}:
{ lib, config, ... }:
with lib;
let
@ -12,16 +8,18 @@ in
options.modules.printing = {
enable = mkEnableOption "printing";
};
config = mkIf cfg.enable {
services.printing = {
enable = true;
# drivers = with pkgs; [];
};
# Enable CUPS
services.printing.enable = true;
# Enable Avahi to auto-detect network printers
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
# For SMB network printers
services.samba.enable = true;
};
}

View File

@ -0,0 +1,61 @@
{
mkModule,
pkgs,
lib,
config,
...
}:
with lib;
let
cfg = config.modules.profiles.base;
in
{
options.modules.profiles.base = {
enable = mkEnableOption "base profile";
};
config = mkIf cfg.enable {
modules = {
bootloader.enable = mkDefault true;
ssh.enable = mkDefault true;
};
# Localization
time.timeZone = "Europe/Amsterdam";
i18n.defaultLocale = "en_US.UTF-8";
console.keyMap = "us";
# Enable neovim
programs.neovim = {
enable = true;
defaultEditor = true;
};
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# Enable the usage of flakes
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
# Clean tmp
boot.tmp.cleanOnBoot = true;
# Base packages
environment.systemPackages = with pkgs; [
git
wget
curl
dig
procps
wireguard-tools
usbutils
pciutils
zip
unzip
];
};
}

View File

@ -0,0 +1,28 @@
{
pkgs,
lib,
config,
...
}:
with lib;
let
cfg = config.modules.profiles.desktop;
in
{
options.modules.profiles.desktop = {
enable = mkEnableOption "desktop profile";
};
config = mkIf cfg.enable {
modules = {
profiles.base.enable = mkDefault true;
fonts.enable = mkDefault true;
graphics.enable = mkDefault true;
gnome.enable = mkDefault true; # TODO: Rename to display manager?
networkmanager.enable = mkDefault true;
printing.enable = mkDefault true;
sound.enable = mkDefault true;
};
};
}

View File

@ -0,0 +1,30 @@
{
pkgs,
lib,
config,
...
}:
with lib;
let
cfg = config.modules.profiles.laptop;
in
{
options.modules.profiles.laptop = {
enable = mkEnableOption "laptop profile";
};
config = mkIf cfg.enable {
# Setup modules
modules = {
profiles.desktop.enable = mkDefault true;
bluetooth.enable = mkDefault true;
power-saving.enable = mkDefault true;
};
# Add packages
environment.systemPackages = with pkgs; [
brightnessctl
];
};
}

View File

@ -1,27 +1,33 @@
{ lib, ... }:
{
imports = [
# Import environment
../default.nix
];
mkModule,
pkgs,
lib,
config,
...
}:
config = {
# State version
system.stateVersion = "24.11";
# Machine hostname
networking.hostName = lib.mkDefault "vm-base";
with lib;
let
cfg = config.modules.profiles.vm;
in
{
options.modules.profiles.vm = {
enable = mkEnableOption "Base VM profile";
};
config = mkIf cfg.enable {
# Enabled modules
modules = {
base.enable = true;
profiles.base.enable = true;
ssh.enable = true;
};
# Enable qemu guest agent
services.qemuGuest.enable = true;
# Machine platform
nixpkgs.hostPlatform = "x86_64-linux";
# Hardware configuration
hardware.enableRedistributableFirmware = true;
boot.initrd.availableKernelModules = [

View File

@ -1,21 +1,15 @@
{
lib,
config,
pkgs,
...
}:
{ lib, config, ... }:
with lib;
let
cfg = config.modules.pipewire;
cfg = config.modules.sound;
in
{
options.modules.pipewire = {
enable = mkEnableOption "pipewire";
options.modules.sound = {
enable = mkEnableOption "sound";
};
config = mkIf cfg.enable {
security.rtkit.enable = true;
# Enable pipewire
services.pipewire = {
enable = true;
alsa.enable = true;
@ -23,5 +17,8 @@ in
pulse.enable = true;
jack.enable = true;
};
# Recommended by wiki, allows user processes to use realtime kernel
security.rtkit.enable = true;
};
}

View File

@ -1,9 +1,4 @@
{
lib,
config,
pkgs,
...
}:
{ lib, config, ... }:
with lib;
let
@ -13,8 +8,8 @@ in
options.modules.ssh = {
enable = mkEnableOption "ssh";
};
config = mkIf cfg.enable {
services.openssh.enable = true;
# TODO: Is this default configuration secure?
};
}

View File

@ -1,36 +0,0 @@
{
lib,
config,
...
}:
with lib;
let
cfg = config.modules.power-saving;
in
{
options.modules.power-saving = {
enable = mkEnableOption "power-saving";
};
config = mkIf cfg.enable {
powerManagement.enable = true;
services.thermald.enable = true;
services.tlp = {
enable = true;
settings = {
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
CPU_MIN_PERF_ON_AC = 0;
CPU_MAX_PERF_ON_AC = 100;
CPU_MIN_PERF_ON_BAT = 0;
CPU_MAX_PERF_ON_BAT = 20;
};
};
};
}

View File

@ -1,64 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.spotifyd;
in
{
options.modules.spotifyd = {
enable = mkEnableOption "spotifyd";
};
config = mkIf cfg.enable {
# User for spotifyd
users.users.mixer = {
group = "mixer";
};
users.groups.mixer = { };
# Spotifyd service
systemd.user.services.spotifyd = {
description = "SpotifyD Service";
wantedBy = [ "default.target" ];
after = [
"network.target"
"sound.target"
];
unitConfig = {
ConditionUser = "mixer"; # TODO: Allow user configuration
};
serviceConfig = {
ExecStart = "${pkgs.spotifyd}/bin/spotifyd --no-daemon --config-path /etc/spotifyd/spotifyd.conf";
Restart = "always";
RestartSec = 5;
};
};
# Set up config
environment.etc = {
"spotifyd/spotifyd.conf" = {
source = ./spotifyd.conf;
mode = "0444";
user = "mixer"; # TODO: Make user configurable
group = "mixer";
};
};
# Set up firewall
networking.firewall = {
allowedTCPPorts = [
5353
5454
];
allowedUDPPorts = [
5353
5454
];
};
};
}

View File

@ -1,118 +0,0 @@
[global]
#---------#
# GENERAL #
#---------#
# The name that gets displayed under the connect tab on
# official clients.
device_name = "Linox"
# The displayed device type in Spotify clients.
# Can be unknown, computer, tablet, smartphone, speaker, t_v,
# a_v_r (Audio/Video Receiver), s_t_b (Set-Top Box), and audio_dongle.
device_type = "a_v_r"
# The directory used to store credentials and audio cache.
# Default: infers a sensible cache directory (e.g. on Linux: $XDG_CACHE_HOME)
#
# Note: The file path does not get expanded. Environment variables and
# shell placeholders like $HOME or ~ don't work!
#cache_path = "/full/path/to/cache/directory"
# If set to true, audio data does NOT get cached.
# In this case, the cache is only used for credentials.
#no_audio_cache = true
# The maximal size of the cache directory in bytes
# The example value corresponds to ~ 1GB
#max_cache_size = 1000000000
# If set to true, `spotifyd` tries to bind to dbus (default is the session bus)
# and expose MPRIS controls. When running headless, without the session bus,
# you should set this to false, to avoid errors. If you still want to use MPRIS,
# have a look at the `dbus_type` option.
use_mpris = false
# The bus to bind to with the MPRIS interface.
# Possible values: "session", "system"
# The system bus can be used if no graphical session is available
# (e.g. on headless systems) but you still want to be able to use MPRIS.
# NOTE: You might need to add appropriate policies to allow spotifyd to
# own the name.
#dbus_type = "session"
#-----------#
# DISCOVERY #
#-----------#
# If set to true, this disables zeroconf discovery.
# This can be useful, if one prefers to run a single-user instance.
#disable_discovery = false
# The port at which `spotifyd` is going to offer its service over the network (TCP).
# If not set, a random port > 1024 is used. For the service to be discoverable on the
# local network via mDNS, both the mDNS port (5353 UDP) and the random or fixed
# zeroconf port need to be allowed through any active firewall.
zeroconf_port = 5454
#-------#
# AUDIO #
#-------#
# The audio backend used to play music. To get
# a list of possible backends, run `spotifyd --help`.
#backend = "alsa" # use portaudio for macOS [homebrew]
backend = "pulseaudio"
# The alsa audio device to stream audio. To get a
# list of valid devices, run `aplay -L`,
#device = "default" # omit for macOS
device = "SpotifyD-Proxy"
# The PCM sample format to use. Possible values
# are F32, S32, S24, S24_3, S16.
# Change this value if you encounter errors like
# "Alsa error PCM open ALSA function 'snd_pcm_hw_params_set_format' failed with error 'EINVAL: Invalid argument'"
#audio_format = "S16"
# The volume controller. Each one behaves different to
# volume increases. For possible values, run
# `spotifyd --help`.
#volume_controller = "softvol" # use softvol for macOS
# ! Only relevant for ALSA !
# The alsa control device. By default this is the same
# name as the `device` field.
#control = "default"
# ! Only relevant for ALSA !
# The alsa mixer used by `spotifyd`.
#mixer = "PCM" # omit for macOS
# The audio bitrate. 96, 160 or 320 kbit/s
#bitrate = 160
# Volume on startup between 0 and 100
#initial_volume = 90
initial_volume = 100
# If set to true, enables volume normalisation between songs.
# volume_normalisation = true
# The normalisation pregain that is applied for each song.
#normalisation_pregain = -10
#-------ä
# OTHER #
#-------#
# After the music playback has ended, start playing similar songs based on the previous tracks.
# By default, `spotifyd` infers this setting from the user settings.
autoplay = true
# A command that gets executed in your shell after each song changes.
#on_song_change_hook = "echo \"hook executed on $PLAYER_EVENT\""
# The proxy `spotifyd` will use to connect to spotify.
#proxy = "http://proxy.example.org:8080"

View File

@ -1,24 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.unfree;
in
{
options.modules.unfree = {
enable = mkEnableOption "unfree";
allowedPackages = mkOption {
type = types.listOf types.str;
default = [ ];
};
};
config = mkIf cfg.enable {
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (getName pkg) cfg.allowedPackages;
};
}

View File

@ -1,79 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib;
let
# User configuration
userModule = types.submodule {
options = {
sudo = mkOption {
type = types.bool;
default = false;
example = true;
description = "Whether the user is allowed sudo access.";
};
configuration = mkOption {
type = types.path;
default = ./users/base.nix;
description = "What home manager configuration to use for this user.";
};
desktopInit = mkOption {
type = types.lines;
default = "";
description = "Bash script to execute after initial log in.";
};
};
};
in
{
imports = [
# Import systemwide configuration
./systemwide.nix
];
options = {
machine.sudo-groups = mkOption {
type = types.listOf types.str;
default = [ ];
description = "Groups assigned to sudo users.";
};
machine.users = mkOption {
type = types.attrsOf userModule;
default = { };
description = "Users configured on this system.";
};
};
config = {
# Add required home manager modules
home-manager.sharedModules = [
# Modules
../../user-modules/default.nix
# Custom packages
../../pkgs/default.nix
];
# Create users
users.users = attrsets.concatMapAttrs (name: value: {
${name} = {
isNormalUser = true;
extraGroups = mkIf value.sudo (
[
"wheel"
]
++ config.machine.sudo-groups
);
};
}) config.machine.users;
# Create home manager configuration for users
home-manager.users = attrsets.concatMapAttrs (name: value: {
${name} = value.configuration;
}) config.machine.users;
};
}

View File

@ -1,42 +0,0 @@
{
config,
lib,
...
}:
with lib;
let
moduleFiles = [
../../user-modules/desktop/systemwide.nix
../../user-modules/development/systemwide.nix
../../user-modules/gaming/systemwide.nix
../../user-modules/keyring/systemwide.nix
];
moduleConfig = lists.foldr (file: acc: recursiveUpdate acc (import file)) { } moduleFiles;
moduleNames = attrNames moduleConfig;
mkModule =
name: moduleConfig:
{ pkgs, ... }:
{
config =
mkIf
(any (
user:
(
config.home-manager.users.${user}.modules.${name}.enable
|| (any (specialisation: specialisation.configuration.modules.${name}.enable) (
attrValues config.home-manager.users.${user}.specialisation
))
)
) (attrNames config.home-manager.users))
(if (isAttrs moduleConfig) then moduleConfig else (moduleConfig { inherit config pkgs; }));
};
imports = map (name: mkModule name moduleConfig."${name}") moduleNames;
in
{
imports = imports;
}

View File

@ -1,23 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.tailscale;
in
{
options.modules.tailscale = {
enable = mkEnableOption "tailscale";
};
config = mkIf cfg.enable {
services.tailscale = {
enable = true;
useRoutingFeatures = "client";
};
};
}

View File

@ -1,24 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.wpa_supplicant;
in
{
options.modules.wpa_supplicant = {
enable = mkEnableOption "wpa_supplicant";
};
config = mkIf cfg.enable {
networking.wireless = {
enable = true;
userControlled.enable = true;
allowAuxiliaryImperativeNetworks = true;
};
};
}

View File

@ -1,21 +0,0 @@
{
...
}:
let
overlay = final: prev: {
dina-psfu = prev.callPackage ./fonts/dina-psfu.nix { };
ttf2psf = prev.callPackage ./fonts/ttf2psf.nix { };
wqy-zenhei = prev.callPackage ./fonts/wqy-zenhei.nix { };
wqy-microhei = prev.callPackage ./fonts/wqy-microhei.nix { };
wqy-bitmapsong = prev.callPackage ./fonts/wqy-bitmapsong.nix { };
wprs = prev.callPackage ./programs/wprs/default.nix { };
nixgreety = prev.callPackage ./programs/nixgreety.nix { };
carla_osc_bridge = prev.callPackage ./programs/carla_osc_bridge.nix { };
# ly = prev.callPackage ./programs/ly/default.nix { };
};
in
{
nixpkgs.overlays = [ overlay ];
}

View File

@ -1,31 +0,0 @@
{
pkgs,
...
}:
pkgs.stdenv.mkDerivation {
pname = "ttf2psf";
version = "1.0.0";
src = pkgs.fetchFromGitHub {
owner = "NateChoe1";
repo = "ttf2psf";
rev = "8db09d05385f595c320eccae4c48ff4393ca5bde";
sha256 = "v52TZp+GyXHBAMsIoHFA8ZIMPsDVls13WW29vpesCig=";
};
buildInputs = with pkgs; [
pkg-config
freetype
];
buildPhase = ''
make build/ttf2psf
'';
installPhase = ''
install -Dm 755 -t $out/bin build/ttf2psf
install -Dm 644 -t $out/share/ttf2psf data/*.*
install -Dm 644 -t $out/share/ttf2psf/fontsets data/fontsets/*
'';
}

View File

@ -1,35 +0,0 @@
{
pkgs,
...
}:
pkgs.stdenv.mkDerivation rec {
pname = "wqy-bitmapsong-pcf";
version = "1.0.0-RC1";
src = pkgs.fetchurl {
url = "mirror://sourceforge/wqy/${pname}-${version}.tar.gz";
hash = "sha256-0uvwkRUbvJ0remTnlP8dElRjaBVd6iukNYBTE/CTO7s=";
};
buildInputs = [ pkgs.fontforge ];
buildPhase = ''
newName() {
test "''${1:5:1}" = i && _it=Italic || _it=
case ''${1:6:3} in
400) test -z $it && _weight=Medium ;;
700) _weight=Bold ;;
esac
_pt=''${1%.pcf}
_pt=''${_pt#*-}
echo "WenQuanYi_Bitmap_Song$_weight$_it$_pt"
}
for i in *.pcf; do
fontforge -lang=ff -c "Open(\"$i\"); Generate(\"$(newName $i).otb\")"
done
'';
installPhase = ''
install -Dm644 *.otb -t $out/share/fonts/
'';
}

View File

@ -1,22 +0,0 @@
{
pkgs,
...
}:
pkgs.stdenv.mkDerivation rec {
pname = "wqy-microhei";
version = "0.2.0-beta";
src = pkgs.fetchurl {
url = "mirror://sourceforge/wqy/${pname}-${version}.tar.gz";
hash = "sha256-KAKsgCOqNqZupudEWFTjoHjTd///QhaTQb0jeHH3IT4=";
};
installPhase = ''
runHook preInstall
install -Dm644 *.ttc -t $out/share/fonts/
runHook postInstall
'';
}

View File

@ -1,22 +0,0 @@
{
pkgs,
...
}:
pkgs.stdenv.mkDerivation rec {
pname = "wqy-zenhei";
version = "0.9.45";
src = pkgs.fetchurl {
url = "mirror://sourceforge/wqy/${pname}-${version}.tar.gz";
hash = "sha256-5LfjBkdb+UJ9F1dXjw5FKJMMhMROqj8WfUxC8RDuddY=";
};
installPhase = ''
runHook preInstall
install -Dm644 *.ttc -t $out/share/fonts/
runHook postInstall
'';
}

View File

@ -1,19 +0,0 @@
{ pkgs, ... }:
with pkgs;
rustPlatform.buildRustPackage {
pname = "carla_osc_bridge";
version = "master";
src = fetchFromGitea {
domain = "git.bulthuis.dev";
owner = "Jan";
repo = "carla_osc_bridge";
rev = "c037e2d2a1b29b785d8acc10fa0cb761afdb3fcf";
hash = "sha256-Wvdfm+4dfygZwkvaUhO9w7DrrUl3ZYvtD7nYrPSD0eA=";
};
cargoHash = "sha256-s1ZKbhHudgPOy7613zbT8TkbM6B7oloLEuTYHoWjX5o=";
useFetchCargoVendor = true;
}

View File

@ -1,47 +0,0 @@
{
stdenv,
lib,
fetchFromGitHub,
linux-pam,
libxcb,
makeBinaryWrapper,
zig_0_12,
callPackage,
nixosTests,
}:
stdenv.mkDerivation {
pname = "ly";
version = "1.0.2";
src = fetchFromGitHub {
owner = "peterc-s";
repo = "ly";
rev = "e6d8bea236dd0097adb1c22e9a23d95102ebe9d9";
sha256 = "w9YdNVD+8UhrEbPJ7xqsd/WoxU2rlo2GXFtc9JpWHxo=";
};
nativeBuildInputs = [
makeBinaryWrapper
zig_0_12.hook
];
buildInputs = [
libxcb
linux-pam
];
postPatch = ''
ln -s ${callPackage ./deps.nix { }} $ZIG_GLOBAL_CACHE_DIR/p
'';
passthru.tests = { inherit (nixosTests) ly; };
meta = with lib; {
description = "TUI display manager";
license = licenses.wtfpl;
homepage = "https://github.com/fairyglade/ly";
maintainers = [ maintainers.vidister ];
platforms = platforms.linux;
mainProgram = "ly";
};
}

View File

@ -1,110 +0,0 @@
# generated by zon2nix (https://github.com/Cloudef/zig2nix)
{
lib,
linkFarm,
fetchurl,
fetchgit,
runCommandLocal,
zig,
name ? "zig-packages",
}:
let
unpackZigArtifact =
{ name, artifact }:
runCommandLocal name { nativeBuildInputs = [ zig ]; } ''
hash="$(zig fetch --global-cache-dir "$TMPDIR" ${artifact})"
mv "$TMPDIR/p/$hash" "$out"
chmod 755 "$out"
'';
fetchZig =
{
name,
url,
hash,
}:
let
artifact = fetchurl { inherit url hash; };
in
unpackZigArtifact { inherit name artifact; };
fetchGitZig =
{
name,
url,
hash,
}:
let
parts = lib.splitString "#" url;
base = lib.elemAt parts 0;
rev = lib.elemAt parts 1;
in
fetchgit {
inherit name rev hash;
url = base;
deepClone = false;
};
fetchZigArtifact =
{
name,
url,
hash,
}:
let
parts = lib.splitString "://" url;
proto = lib.elemAt parts 0;
path = lib.elemAt parts 1;
fetcher = {
"git+http" = fetchGitZig {
inherit name hash;
url = "http://${path}";
};
"git+https" = fetchGitZig {
inherit name hash;
url = "https://${path}";
};
http = fetchZig {
inherit name hash;
url = "http://${path}";
};
https = fetchZig {
inherit name hash;
url = "https://${path}";
};
file = unpackZigArtifact {
inherit name;
artifact = /. + path;
};
};
in
fetcher.${proto};
in
linkFarm name [
{
name = "122062d301a203d003547b414237229b09a7980095061697349f8bef41be9c30266b";
path = fetchZigArtifact {
name = "clap";
url = "https://github.com/Hejsil/zig-clap/archive/refs/tags/0.9.1.tar.gz";
hash = "sha256-7qxm/4xb+58MGG+iUzssUtR97OG2dRjAqyS0BAet4HY=";
};
}
{
name = "12209b971367b4066d40ecad4728e6fdffc4cc4f19356d424c2de57f5b69ac7a619a";
path = fetchZigArtifact {
name = "zigini";
url = "https://github.com/Kawaii-Ash/zigini/archive/0bba97a12582928e097f4074cc746c43351ba4c8.tar.gz";
hash = "sha256-OdaJ5tqmk2MPwaAbpK4HRD/CcQCN+Cjj8U63BqUcFMs=";
};
}
{
name = "1220b0979ea9891fa4aeb85748fc42bc4b24039d9c99a4d65d893fb1c83e921efad8";
path = fetchZigArtifact {
name = "ini";
url = "https://github.com/ziglibs/ini/archive/e18d36665905c1e7ba0c1ce3e8780076b33e3002.tar.gz";
hash = "sha256-RQ6OPJBqqH7PCL+xiI58JT7vnIo6zbwpLWn+byZO5iM=";
};
}
]

View File

@ -1,19 +0,0 @@
{ pkgs, ... }:
with pkgs;
rustPlatform.buildRustPackage {
pname = "nixgreety";
version = "master";
src = fetchFromGitea {
domain = "git.bulthuis.dev";
owner = "Jan";
repo = "nixgreety";
rev = "c7278a910a0238a53f23fe9a0ae881802a4bcb31";
hash = "sha256-kZB+iEFIDJ8pOJetu4Isu4oaktgIn14D4PcpDXLOXA8=";
};
cargoHash = "sha256-pklKVzYoChRqPZ/D3BsMGnaBFd615TKbvoAy7iU8UtA=";
useFetchCargoVendor = true;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,50 +0,0 @@
{
lib,
rustPlatform,
fetchFromGitHub,
pkg-config,
libxkbcommon,
python3,
runCommand,
wprs,
}:
rustPlatform.buildRustPackage {
pname = "wprs";
version = "0-unstable-2025-04-16";
src = fetchFromGitHub {
owner = "wayland-transpositor";
repo = "wprs";
rev = "dfc1385bcb73734cd0d05a7e353522983c236562";
hash = "sha256-MrfYrKAVFoT453B2zED6Ax2coZ/KZ7CWYdZCx469Q/4=";
};
nativeBuildInputs = [
pkg-config
];
buildInputs = [
libxkbcommon
(python3.withPackages (pp: with pp; [ psutil ]))
];
useFetchCargoVendor = true;
cargoHash = "sha256-01PTfgDeagC72z8XADXEn5Aio6UWQAAYgDP4zKFTPpY=";
preFixup = ''
cp wprs "$out/bin/wprs"
'';
passthru.tests.sanity = runCommand "wprs-sanity" { nativeBuildInputs = [ wprs ]; } ''
${wprs}/bin/wprs -h > /dev/null && touch $out
'';
meta = with lib; {
description = "rootless remote desktop access for remote Wayland";
license = licenses.asl20;
maintainers = with maintainers; [ mksafavi ];
platforms = [ "x86_64-linux" ]; # The aarch64-linux support is not implemented in upstream yet. Also, the darwin platform is not supported as it requires wayland.
homepage = "https://github.com/wayland-transpositor/wprs";
mainProgram = "wprs";
};
}

View File

@ -1,54 +0,0 @@
{
nixpkgs,
flake-utils,
...
}:
let
imports = [
./shell.nix
./languages/python.nix
./languages/rust.nix
./utilities/cuda.nix
./utilities/jupyter.nix
];
in
{
mkShell =
attrs:
(flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
evaluated =
(nixpkgs.lib.evalModules {
modules = [ attrs ] ++ imports;
specialArgs = {
pkgs = pkgs;
};
}).config;
recUpdate = nixpkgs.lib.recursiveUpdate;
libPackages = evaluated.libPackages pkgs;
shell = recUpdate {
env =
evaluated.env
// (
if (libPackages != [ ]) then
{
LD_LIBRARY_PATH = nixpkgs.lib.makeLibraryPath libPackages;
}
else
{ }
);
packages = evaluated.packages ++ (evaluated.extraPackages pkgs) ++ libPackages;
} evaluated.override;
in
{
devShells.default = pkgs.mkShell shell;
}
));
}

View File

@ -1,35 +0,0 @@
{
pkgs,
lib,
config,
...
}:
with lib;
let
packages = config.python.packages;
pythonPackage = pkgs.python3.withPackages packages;
in
{
options.python = {
enable = mkEnableOption "Python";
packages = mkOption {
type = types.functionTo (types.listOf types.package) // {
merge =
loc: defs: p:
lib.concatMap (def: (def.value p)) defs;
};
default = p: [ ];
description = "Python packages to install";
};
# TODO: Add option to directly read from requirements.txt, maybe with mach-nix
};
config = mkIf config.python.enable {
packages = [
pythonPackage
];
env.PYTHONINTERPRETER = "${pythonPackage}/bin/python";
};
}

View File

@ -1,37 +0,0 @@
{
pkgs,
lib,
config,
...
}:
with lib;
let
rustPackage = pkgs.rustc;
in
{
options.rust = {
enable = mkEnableOption "Rust";
# TODO: Add option to specify toolchain file
# See https://ayats.org/blog/nix-rustup
};
config = mkIf config.rust.enable {
packages = with pkgs; [
rustPackage
cargo
clippy
rustfmt
cargo-audit
bacon
evcxr
# TODO: Might be needed for bindgen
# rustPlatform.bindgenHook
# pkg-config
];
# env.RUST_SRC_PATH = "${rustPackage}/lib/rustlib/src/rust/library";
};
}

View File

@ -1,43 +0,0 @@
{ lib, ... }:
with lib;
{
options = {
env = mkOption {
type = types.attrsOf types.str;
default = { };
};
packages = mkOption {
type = types.listOf types.package;
default = [ ];
description = "Packages to install";
};
extraPackages = mkOption {
type = types.functionTo (types.listOf types.package) // {
merge =
loc: defs: p:
lib.concatMap (def: (def.value p)) defs;
};
default = p: [ ];
description = "Extra packages to install";
};
libPackages = mkOption {
type = types.functionTo (types.listOf types.package) // {
merge =
loc: defs: p:
lib.concatMap (def: (def.value p)) defs;
};
default = p: [ ];
description = "Packages to install and add to library path";
};
override = mkOption {
type = types.attrs;
default = { };
description = "Settings in the mkShell call to override";
};
};
}

View File

@ -1,15 +0,0 @@
{
lib,
config,
...
}:
with lib;
{
options.cuda = {
enable = mkEnableOption "CUDA";
};
config = mkIf config.cuda.enable {
};
}

View File

@ -1,22 +0,0 @@
{
lib,
config,
...
}:
with lib;
{
options.jupyter = {
enable = mkEnableOption "Jupyter";
};
config = mkIf config.jupyter.enable {
python.enable = mkDefault true;
python.packages =
p: with p; [
jupyter
notebook
ipykernel
];
};
}

View File

@ -1,28 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.bluetuith;
in
{
options.modules.bluetuith = {
enable = mkEnableOption "bluetuith";
};
config = mkIf cfg.enable {
home.packages = with pkgs; [ bluetuith ];
# Add nix tree
xdg.desktopEntries.bluetuith = {
exec = "${pkgs.bluetuith}/bin/bluetuith";
name = "Bluetuith";
terminal = true;
type = "Application";
};
};
}

View File

@ -1,34 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
{
imports = [
./firefox/default.nix
./qutebrowser/default.nix
];
options.default.browser = mkOption {
type = types.str;
default = "";
description = "Default browser";
};
config = {
xdg.mimeApps = {
enable = true;
defaultApplications = {
"text/html" = "${config.default.browser}";
"x-scheme-handler/http" = "${config.default.browser}";
"x-scheme-handler/https" = "${config.default.browser}";
"x-scheme-handler/about" = "${config.default.browser}";
"x-scheme-handler/unknown" = "${config.default.browser}";
};
};
};
}

View File

@ -1,76 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.modules.firefox;
in
{
options.modules.firefox = {
enable = lib.mkEnableOption "firefox";
default = lib.mkEnableOption "default";
};
config = lib.mkIf cfg.enable {
default.browser = mkIf cfg.default "firefox.desktop";
programs.firefox = {
enable = true;
policies = {
AppAutoUpdate = false;
BlockAboutAddons = false;
BlockAboutConfig = true;
BlockAboutProfiles = true;
DisableAppUpdate = true;
DisableFeedbackCommands = true;
DisableMasterPasswordCreation = true;
DisablePocket = true;
DisableProfileImport = true;
DisableProfileRefresh = true;
DisableSetDesktopBackground = true;
DisableTelemetry = true;
DisplayBookmarksToolbar = "never";
DisplayMenuBar = "never";
DNSOverHTTPS = {
Enabled = false;
};
DontCheckDefaultBrowser = true;
PasswordManagerEnabled = false;
TranslateEnabled = true;
UseSystemPrintDialog = true;
};
profiles.nixos = {
search.default = "ddg";
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin
];
# Theming
userChrome = readFile (
pkgs.replaceVars ./userChrome.css {
colors = config.desktop.theming.colorsCSS;
}
);
settings = {
"browser.tabs.inTitlebar" = 0;
"extensions.autoDisableScopes" = 0;
"devtools.chrome.enabled" = true;
"devtools.debugger.remote-enabled" = true;
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
};
# Force overwriting configuration file
search.force = true;
containersForce = true;
};
};
};
}

View File

@ -1,73 +0,0 @@
/* Import theme colors */
@colors@
/* Configure titlebar */
#titlebar {
/* Add consistent margins to tab bar */
padding: 0 2px !important;
/* Add emphasized color to background of tab bar */
background-color: var(--nix-color-bg-status) !important;
/* Set correct text color */
color: var(--nix-color-fg) !important;
}
.tab-background:is([selected], [multiselected]) {
/* Set correct background color */
background-color: var(--nix-color-bg) !important;
}
.tab-content {
/* Set correct text color */
color: var(--nix-color-fg) !important;
}
/* Configure navigation bar */
#nav-bar {
/* Set correct background color */
background-color: var(--nix-color-bg) !important;
/* Set correct text color */
color: var(--nix-color-fg) !important;
}
#urlbar {
/* Set correct text color */
color: var(--nix-color-fg) !important;
}
#urlbar[open]>#urlbar-background {
/* Set correct background color when opened */
background-color: var(--nix-color-bg) !important;
/* Use same box-shadow as tabs when opened */
border: none !important;
box-shadow: 0 0 4px rgba(0, 0, 0, .4) !important;
}
#urlbar[focused]:not([suppress-focus-border])>#urlbar-background {
/* Set better outline for focused urlbar */
outline-color: var(--nix-color-border-focused) !important;
outline-width: 1px !important;
outline-offset: 0 !important;
}
#urlbar-background {
/* Set the correct background color */
background-color: var(--nix-color-bg-status) !important;
}
/* Configure popups */
panelview {
/* Set correct background color for popups */
background-color: var(--nix-color-bg) !important;
/* Set correct text color */
color: var(--nix-color-fg) !important;
}
menupopup {
/* Set correct background color for context menus */
--panel-background: var(--nix-color-bg) !important;
}

View File

@ -1,34 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.modules.qutebrowser;
theme = config.desktop.theming;
in
{
options.modules.qutebrowser = {
enable = mkEnableOption "qutebrowser";
default = mkEnableOption "default";
};
config = mkIf cfg.enable {
default.browser = mkIf cfg.default "org.qutebrowser.qutebrowser.desktop";
programs.qutebrowser = {
enable = true;
extraConfig = ''
config.set("completion.web_history.max_items", 256)
config.set("colors.webpage.darkmode.enabled", False)
config.set("colors.webpage.preferred_color_scheme", "${if theme.darkMode then "dark" else "light"}")
config.set("fonts.default_family", "${theme.fonts.interface.name}")
config.set("fonts.default_size", "${toString theme.fonts.interface.recommendedSize}pt")
'';
};
};
}

View File

@ -1,368 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.modules.btop;
colors = config.desktop.theming.schemeColors;
in
{
options.modules.btop = {
enable = mkEnableOption "btop";
};
config = mkIf cfg.enable {
home.packages = with pkgs; [ btop ];
xdg.configFile."btop/btop.conf" = {
enable = true;
text = ''
#? Config file for btop v. 1.4.0
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "nixos"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = True
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = True
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = False
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = False
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = False
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
graph_symbol_gpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "cpu net proc mem"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 500
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "cpu lazy"
#* Reverse sorting order, True or False.
proc_reversed = False
#* Show processes as a tree.
proc_tree = False
#* Use the cpu graph colors in the process list.
proc_colors = True
#* Use a darkening gradient in the process list.
proc_gradient = True
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = False
#* Show process memory as bytes instead of percent.
proc_mem_bytes = True
#* Show cpu graph for each process.
proc_cpu_graphs = True
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = False
#* Show proc box on left side of screen instead of right.
proc_left = False
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = False
#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = False
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "Auto"
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "Auto"
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
show_gpu_info = "Auto"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = True
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = False
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = False
#* Shows the system uptime in the CPU box.
show_uptime = True
#* Show cpu temperature.
check_temp = True
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = True
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = False
#* Show CPU frequency.
show_cpu_freq = True
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = True
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user".
disks_filter = ""
#* Show graphs instead of meters for memory values.
mem_graphs = True
#* Show mem box below net box instead of above.
mem_below_net = False
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = True
#* If swap memory should be shown in memory box.
show_swap = True
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = True
#* If mem box should be split to also show disks info.
show_disks = True
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = True
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = True
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = False
#* Set to true to show available disk space for privileged users.
disk_free_priv = False
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = True
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = True
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = False
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = True
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = True
#* Starts with the Network Interface specified here.
net_iface = ""
#* Show battery stats in top right if battery is present.
show_battery = False
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Show power stats of battery next to charge indicator.
show_battery_watts = True
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = True
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = True
#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""
#* Custom gpu1 model name, empty string to disable.
custom_gpu_name1 = ""
#* Custom gpu2 model name, empty string to disable.
custom_gpu_name2 = ""
#* Custom gpu3 model name, empty string to disable.
custom_gpu_name3 = ""
#* Custom gpu4 model name, empty string to disable.
custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""
'';
};
xdg.configFile."btop/themes/nixos.theme" = {
enable = true;
text = with colors; ''
# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#${base00}"
# Main text color
theme[main_fg]="#${base05}"
# Title color for boxes
theme[title]="#${base05}"
# Highlight color for keyboard shortcuts
theme[hi_fg]="#${base0D}"
# Background color of selected item in processes box
theme[selected_bg]="#${base03}"
# Foreground color of selected item in processes box
theme[selected_fg]="#${base0D}"
# Color of inactive/disabled text
theme[inactive_fg]="#8c8fa1"
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
theme[graph_text]="#${base06}"
# Background color of the percentage meters
theme[meter_bg]="#${base03}"
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#${base06}"
# CPU, Memory, Network, Proc box outline colors
theme[cpu_box]="#${base0E}" #Mauve
theme[mem_box]="#${base0B}" #Green
theme[net_box]="#e64553" #Maroon
theme[proc_box]="#${colors.base0D}" #Blue
# Box divider line and small boxes line color
theme[div_line]="#9ca0b0"
# Temperature graph color (Green -> Yellow -> Red)
theme[temp_start]="#${base0B}"
theme[temp_mid]="#${base0A}"
theme[temp_end]="#${base08}"
# CPU graph colors (Teal -> Lavender)
theme[cpu_start]="#${base0C}"
theme[cpu_mid]="#209fb5"
theme[cpu_end]="#${base07}"
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
theme[free_start]="#${base0E}"
theme[free_mid]="#${base07}"
theme[free_end]="#${base0D}"
# Mem/Disk cached meter (Sapphire -> Lavender)
theme[cached_start]="#209fb5"
theme[cached_mid]="#${base0D}"
theme[cached_end]="#${base07}"
# Mem/Disk available meter (Peach -> Red)
theme[available_start]="#${base09}"
theme[available_mid]="#e64553"
theme[available_end]="#${base08}"
# Mem/Disk used meter (Green -> Sky)
theme[used_start]="#${base0B}"
theme[used_mid]="#${base0C}"
theme[used_end]="#04a5e5"
# Download graph colors (Peach -> Red)
theme[download_start]="#${base09}"
theme[download_mid]="#e64553"
theme[download_end]="#${base08}"
# Upload graph colors (Green -> Sky)
theme[upload_start]="#${base0B}"
theme[upload_mid]="#${base0C}"
theme[upload_end]="#04a5e5"
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
theme[process_start]="#209fb5"
theme[process_mid]="#${base07}"
theme[process_end]="#${base0E}"
'';
};
modules.shell.aliases = {
top = "btop";
};
};
}

View File

@ -1,42 +0,0 @@
{
...
}:
{
imports = [
# Import all modules
./bluetuith/default.nix
./browser/default.nix
./btop/default.nix
./desktop/default.nix
./development/default.nix
./discord/default.nix
./eduvpn/default.nix
./feishin/default.nix
./fontconfig/default.nix
./gaming/default.nix
./git/default.nix
./keyring/default.nix
./mako/default.nix
./neovim/default.nix
./obsidian/default.nix
./rofi/default.nix
./rofi/rofi-rbw.nix
./scripts/default.nix
./shell/default.nix
./shell/bash.nix
./shell/fish.nix
./spotify/default.nix
./terminal/default.nix
./terminal/foot/default.nix
./vscode/default.nix
./whatsapp/default.nix
./wprs/default.nix
./winbox/default.nix
./xpra/default.nix
./zathura/default.nix
# Import unfree helper
../modules/unfree/default.nix
];
}

View File

@ -1,164 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
cfg = config.modules.waybar;
theme = config.desktop.theming;
colors = theme.colors;
in
{
options.modules.waybar = {
enable = mkEnableOption "waybar";
};
config = mkIf cfg.enable {
home.packages = with pkgs; [
pulsemixer
playerctl
networkmanagerapplet # TODO: Move
];
modules.desktop.reloadScript = ''
# if ${pkgs.procps}/bin/pgrep waybar; then
# ${pkgs.procps}/bin/pkill waybar
# fi
${pkgs.waybar}/bin/waybar &
'';
programs.waybar = {
enable = true;
systemd.enable = false;
settings = {
mainBar = {
layer = "top";
spacing = 16;
modules-left = [ "river/tags" ];
modules-center = [
#"river/window"
"mpris"
];
modules-right = [
"tray"
"bluetooth"
"network"
"pulseaudio"
"battery"
"clock"
];
"river/window" = {
max-length = 50;
};
"river/tags" = {
tag-labels = [
""
""
""
""
""
""
""
""
""
];
disable-click = false;
};
network = {
tooltip = false;
on-click = "wpa_gui";
format-wifi = " {essid}"; # Spacing achieved using "Thin Space"
format-ethernet = "TODO";
format-disconnected = "";
};
pulseaudio = {
tooltip = false;
format = "{icon}{volume}%"; # Spacing achieved using "Thin Space"
#format-muted = "";
format-muted = "{icon}--%"; # Spacing achieved using "Thin Space"
format-icons = {
#headphone = "";
#default = [ "" "" ];
headphone = "";
headphone-muted = "";
default = [
""
""
""
];
};
};
battery = {
format = "{icon}{capacity}%"; # Spacing achieved using "Thin Space"
format-charging = "{capacity}%"; # Spacing achieved using "Thin Space"
#format-icons = [ "󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ];
format-icons = [
""
""
""
""
""
""
""
""
""
""
""
];
interval = 1;
};
clock = {
#format = "󰅐 {:%H:%M}";
#format = "   {:%H:%M}"; # Spacing achieved using "Thin Space"
format = "{:%H:%M}";
};
mpris = {
format = "{dynamic}";
tooltip-format = "";
interval = 1;
};
bluetooth = {
tooltip = false;
format = "{status}"; # Spacing achieved using "Thin Space"
format-connected = "{device_alias}"; # Spacing achieved using "Thin Space"
};
};
};
# TODO: Replace base03 color with named color
style = ''
window#waybar {
color: #${colors.fg};
background-color: #${colors.bg};
border-style: none none solid none;
border-width: ${toString theme.layout.borderSize}px;
border-color: #${colors.border-unfocused};
font-size: 12px;
font-family: "${theme.fonts.monospace.name}";
}
.modules-right {
margin: 0 8px 0 0;
}
#tags button {
color: #${theme.schemeColors.base03};
padding: 0 5px 1px 5px;
border-radius: 0;
font-size: 16px;
font-family: "wenquanyi bitmap song";
}
#tags button.occupied {
color: #${colors.fg};
}
#tags button.focused {
color: #${colors.accent};
}
'';
};
};
}

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