deprecate stylix, fix minor gripes and bugs

This commit is contained in:
alisceon 2026-05-22 19:48:24 +02:00
parent 6b492bad2f
commit fb1ad8d919
42 changed files with 951 additions and 688 deletions

518
flake.lock generated
View file

@ -1,518 +0,0 @@
{
"nodes": {
"base16": {
"inputs": {
"fromYaml": "fromYaml"
},
"locked": {
"lastModified": 1755819240,
"narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "base16.nix",
"type": "github"
}
},
"base16-fish": {
"flake": false,
"locked": {
"lastModified": 1765809053,
"narHash": "sha256-XCUQLoLfBJ8saWms2HCIj4NEN+xNsWBlU1NrEPcQG4s=",
"owner": "tomyun",
"repo": "base16-fish",
"rev": "86cbea4dca62e08fb7fd83a70e96472f92574782",
"type": "github"
},
"original": {
"owner": "tomyun",
"repo": "base16-fish",
"rev": "86cbea4dca62e08fb7fd83a70e96472f92574782",
"type": "github"
}
},
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1776754714,
"narHash": "sha256-E3OAK27smtATTmX45uoTSRsVD+Y+ZiVVfgM/tjpbtYg=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "4d508123037e7851ad36ebf7d9c48b0e9e1eb581",
"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": 1776136500,
"narHash": "sha256-r0gN2brVWA351zwMV0Flmlcd6SGMvYqFbvC3DfKFM8Y=",
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"rev": "0f8ba203d475587f477e7ae12661bd8459e225b7",
"type": "github"
},
"original": {
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"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_2": {
"inputs": {
"nixpkgs-lib": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1775087534,
"narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"fromYaml": {
"flake": false,
"locked": {
"lastModified": 1731966426,
"narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=",
"owner": "SenchoPens",
"repo": "fromYaml",
"rev": "106af9e2f715e2d828df706c386a685698f3223b",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "fromYaml",
"type": "github"
}
},
"gnome-shell": {
"flake": false,
"locked": {
"lastModified": 1767737596,
"narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "ef02db02bf0ff342734d525b5767814770d85b49",
"type": "github"
},
"original": {
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "ef02db02bf0ff342734d525b5767814770d85b49",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1778501066,
"narHash": "sha256-T0vB/D3DqGGe+ent3+3jDTIFl2SeXcga3FMcI6AxiMU=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "c0729fa3f060008080b2124fd0c3b9285d53b393",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nix-minecraft": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": "nixpkgs",
"systems": "systems"
},
"locked": {
"lastModified": 1778039471,
"narHash": "sha256-Arjg44jFcpSqOKK05EIxbKIjhfjou/EGF12COFU+9QA=",
"owner": "Infinidoge",
"repo": "nix-minecraft",
"rev": "87611ef4788116de05f851920c5958f0c37d5b05",
"type": "github"
},
"original": {
"owner": "Infinidoge",
"repo": "nix-minecraft",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1769461804,
"narHash": "sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "bfc1b8a4574108ceef22f02bafcf6611380c100d",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1777954456,
"narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"noctalia": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"noctalia-qs": [
"noctalia-qs"
]
},
"locked": {
"lastModified": 1778464608,
"narHash": "sha256-tZRvyaKVP0DJ9DSFrr6K/l3X74Orfirk3Jjo7+br4Qs=",
"owner": "noctalia-dev",
"repo": "noctalia-shell",
"rev": "761869a561548874fe7e293b157fd7841576b367",
"type": "github"
},
"original": {
"owner": "noctalia-dev",
"repo": "noctalia-shell",
"type": "github"
}
},
"noctalia-qs": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_2",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1778377995,
"narHash": "sha256-uUzHDHqQF1rdVNiTa05L0mML3/d7fpbAShjCRWxbrBQ=",
"owner": "noctalia-dev",
"repo": "noctalia-qs",
"rev": "d8327a723eed6dd9aebe8e0b162126f390e827df",
"type": "github"
},
"original": {
"owner": "noctalia-dev",
"repo": "noctalia-qs",
"type": "github"
}
},
"nur": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1778498727,
"narHash": "sha256-+36aIJntGC1irkJZX5VHQNCRZpPM1XstFbooJ7Jt7l8=",
"owner": "nix-community",
"repo": "NUR",
"rev": "eb5c3f6ac768a4be604513ef9d4cc1770ab77d66",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"nur_2": {
"inputs": {
"flake-parts": [
"stylix",
"flake-parts"
],
"nixpkgs": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1777598946,
"narHash": "sha256-X239dAGaU1+gfDj8jKH8GzlqKMcxaVfXOio+uzBOkeE=",
"owner": "nix-community",
"repo": "NUR",
"rev": "5d55af01c0f86be583931fe99207fc56c14134b3",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nix-minecraft": "nix-minecraft",
"nixpkgs": "nixpkgs_2",
"noctalia": "noctalia",
"noctalia-qs": "noctalia-qs",
"nur": "nur",
"stylix": "stylix"
}
},
"stylix": {
"inputs": {
"base16": "base16",
"base16-fish": "base16-fish",
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts_2",
"gnome-shell": "gnome-shell",
"nixpkgs": [
"nixpkgs"
],
"nur": "nur_2",
"systems": "systems_3",
"tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes",
"tinted-tmux": "tinted-tmux",
"tinted-zed": "tinted-zed"
},
"locked": {
"lastModified": 1778104276,
"narHash": "sha256-/DSSnU0LLmOTG/OCgGwYpxP6+5YvxRx2g/GhI4x6aCU=",
"owner": "nix-community",
"repo": "stylix",
"rev": "18ed8d270231e067fe2739998479ed5d7c659c2c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "stylix",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"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-kitty": {
"flake": false,
"locked": {
"lastModified": 1735730497,
"narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=",
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-kitty",
"type": "github"
}
},
"tinted-schemes": {
"flake": false,
"locked": {
"lastModified": 1777041405,
"narHash": "sha256-BAGZ7ObFV/9Z61OJZun7ifPyhkuHqNuW1QIhQ8LuzCo=",
"owner": "tinted-theming",
"repo": "schemes",
"rev": "5f868b3a338b6904c47f3833b9c411be641983a8",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "schemes",
"type": "github"
}
},
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1777169200,
"narHash": "sha256-h7dDbIzP5hDr9v97w9PL6jdAgXawmj6krcH+959rqpU=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "f798c2dce44ef815bb6b8f05a82135c7942d35ac",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-tmux",
"type": "github"
}
},
"tinted-zed": {
"flake": false,
"locked": {
"lastModified": 1777463218,
"narHash": "sha256-Bhkozqtq3BKLqWTlmKm8uAptfX4aRGI8QX3eEL54Vpc=",
"owner": "tinted-theming",
"repo": "base16-zed",
"rev": "5768d08ed2e7944a26a958868cdb073cb8856dae",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-zed",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"noctalia-qs",
"nixpkgs"
]
},
"locked": {
"lastModified": 1775636079,
"narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

View file

@ -2,17 +2,14 @@
description = "NixOS configuration for all hosts";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
nur = {
url = "github:nix-community/NUR";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:nix-community/stylix";
url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs";
};
noctalia = {
@ -30,6 +27,7 @@
outputs = inputs @ {
self,
nixpkgs,
nixpkgs-unstable,
...
}:
let
@ -42,13 +40,6 @@
overlays = [
inputs.nur.overlays.default
(_final: prev: {
# openldap 2.6.13 currently flakes in its test suite when bottles pulls
# in the i686 variant for its multi-arch FHS environment.
openldap = prev.openldap.overrideAttrs (old: {
doCheck = if old.version == "2.6.13" then false else old.doCheck;
});
})
];
pkgs = import nixpkgs {
@ -58,20 +49,26 @@
inherit overlays;
};
pkgs-unstable = import nixpkgs {
inherit system;
config.allowUnfree = true;
flake.setFlakeRegistry = true;
inherit overlays;
};
sharedSpecialArgs = {
inherit repoLocalPath;
inherit repoLocalPath pkgs-unstable;
repoRoot = self;
};
sharedModules = [
./nixos/modules/base.nix
inputs.stylix.nixosModules.stylix
inputs.home-manager.nixosModules.home-manager
({ ... }: {
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {
inherit pkgs repoLocalPath;
inherit pkgs repoLocalPath pkgs-unstable;
repoRoot = self;
};
home-manager.backupFileExtension = "backup";
@ -110,7 +107,7 @@
workstationModules = [
./nixos/modules/profiles/workstation.nix
./nixos/modules/wm/sway.nix
./nixos/modules/theme/stylix.nix
./nixos/modules/theme
];
workstationHomeModules = [

View file

@ -1,4 +1,10 @@
{ ... }:
{ theme, ... }:
let
n = theme.paletteNoHash;
fonts = theme.fonts;
terminalFontSize = toString fonts.sizes.terminal;
in
{
programs.foot = {
enable = true;
@ -6,9 +12,39 @@
settings = {
main = {
app-id = "footclient";
dpi-aware = "no";
font = "${fonts.monospace.name}:size=${terminalFontSize}";
initial-color-theme = 1;
workers = 32;
};
bell.system = "no";
colors = {
alpha = 1.0;
background = n.darkestGray;
foreground = n.lightGray;
regular0 = n.darkestGray;
regular1 = n.red;
regular2 = n.green;
regular3 = n.yellow;
regular4 = n.purple;
regular5 = n.blue;
regular6 = n.magenta;
regular7 = n.lightGray;
bright0 = n.gray;
bright1 = n.red;
bright2 = n.green;
bright3 = n.yellow;
bright4 = n.purple;
bright5 = n.blue;
bright6 = n.magenta;
bright7 = n.white;
"16" = n.orange;
"17" = n.cyan;
"18" = n.darkerGray;
"19" = n.darkGray;
"20" = n.mutedGray;
"21" = n.lighterGray;
};
scrollback.lines = 100000;
};
};

View file

@ -1,6 +0,0 @@
{ ... }:
{
programs.qutebrowser = {
enable = true;
};
}

View file

@ -0,0 +1,58 @@
{ theme, ... }:
let
p = theme.palette;
in
{
imports = [
./colors/completion.nix
./colors/downloads.nix
./colors/messages.nix
./colors/statusbar.nix
./colors/tabs.nix
];
programs.qutebrowser.settings = {
colors = {
contextmenu = {
disabled = {
bg = p.darkerGray;
fg = p.darkestGray;
};
menu = {
bg = p.darkestGray;
fg = p.lightGray;
};
selected = {
bg = p.gray;
fg = p.lightGray;
};
};
hints = {
bg = p.darkerGray;
fg = p.lightGray;
match.fg = p.green;
};
keyhint = {
bg = p.darkestGray;
fg = p.lightGray;
suffix.fg = p.lightGray;
};
prompts = {
bg = p.darkestGray;
border = "1px solid ${p.darkestGray}";
fg = p.lightGray;
selected = {
bg = p.darkerGray;
fg = p.lightGray;
};
};
tooltip = {
bg = p.darkestGray;
fg = p.lightGray;
};
webpage.preferred_color_scheme = theme.polarity;
};
hints.border = "1px solid ${p.darkestGray}";
};
}

View file

@ -0,0 +1,34 @@
{ theme, ... }:
let
p = theme.palette;
in
{
programs.qutebrowser.settings.colors.completion = {
category = {
bg = p.darkestGray;
border = {
bottom = p.darkestGray;
top = p.darkestGray;
};
fg = p.green;
};
even.bg = p.darkestGray;
fg = p.lightGray;
item.selected = {
bg = p.gray;
border = {
bottom = p.gray;
top = p.gray;
};
fg = p.lightGray;
match.fg = p.green;
};
match.fg = p.green;
odd.bg = p.darkerGray;
scrollbar = {
bg = p.darkestGray;
fg = p.lightGray;
};
};
}

View file

@ -0,0 +1,22 @@
{ theme, ... }:
let
p = theme.palette;
in
{
programs.qutebrowser.settings.colors.downloads = {
bar.bg = p.darkestGray;
error = {
bg = p.red;
fg = p.darkestGray;
};
start = {
bg = p.green;
fg = p.darkestGray;
};
stop = {
bg = p.magenta;
fg = p.darkestGray;
};
};
}

View file

@ -0,0 +1,24 @@
{ theme, ... }:
let
p = theme.palette;
in
{
programs.qutebrowser.settings.colors.messages = {
error = {
bg = p.red;
border = p.red;
fg = p.darkestGray;
};
info = {
bg = p.green;
border = p.green;
fg = p.darkestGray;
};
warning = {
bg = p.blue;
border = p.blue;
fg = p.darkestGray;
};
};
}

View file

@ -0,0 +1,52 @@
{ theme, ... }:
let
p = theme.palette;
in
{
programs.qutebrowser.settings.colors.statusbar = {
caret = {
bg = p.gray;
fg = p.lightGray;
selection = {
bg = p.gray;
fg = p.lightGray;
};
};
command = {
bg = p.darkestGray;
fg = p.lightGray;
private = {
bg = p.darkerGray;
fg = p.lightGray;
};
};
insert = {
bg = p.green;
fg = p.darkestGray;
};
normal = {
bg = p.darkestGray;
fg = p.lightGray;
};
passthrough = {
bg = p.magenta;
fg = p.darkestGray;
};
private = {
bg = p.darkerGray;
fg = p.lightGray;
};
progress.bg = p.green;
url = {
error.fg = p.red;
fg = p.lightGray;
hover.fg = p.lightGray;
success = {
http.fg = p.magenta;
https.fg = p.green;
};
warn.fg = p.blue;
};
};
}

View file

@ -0,0 +1,53 @@
{ theme, ... }:
let
p = theme.palette;
in
{
programs.qutebrowser.settings.colors.tabs = {
bar.bg = p.darkestGray;
even = {
bg = p.darkerGray;
fg = p.lightGray;
};
indicator = {
error = p.red;
start = p.magenta;
stop = p.green;
};
odd = {
bg = p.darkestGray;
fg = p.lightGray;
};
pinned = {
even = {
bg = p.green;
fg = p.darkestGray;
};
odd = {
bg = p.magenta;
fg = p.darkestGray;
};
selected = {
even = {
bg = p.gray;
fg = p.lightGray;
};
odd = {
bg = p.gray;
fg = p.lightGray;
};
};
};
selected = {
even = {
bg = p.gray;
fg = p.lightGray;
};
odd = {
bg = p.gray;
fg = p.lightGray;
};
};
};
}

View file

@ -0,0 +1,8 @@
{
imports = [
./colors.nix
./fonts.nix
];
programs.qutebrowser.enable = true;
}

View file

@ -0,0 +1,23 @@
{ theme, ... }:
let
fonts = theme.fonts;
fontSize = toString fonts.sizes.applications;
in
{
programs.qutebrowser.settings.fonts = {
default_family = fonts.sansSerif.name;
default_size = "${fontSize}pt";
web = {
family = {
cursive = fonts.serif.name;
fantasy = fonts.serif.name;
fixed = fonts.monospace.name;
sans_serif = fonts.sansSerif.name;
serif = fonts.serif.name;
standard = fonts.sansSerif.name;
};
size.default = 18;
};
};
}

View file

@ -1,12 +0,0 @@
{ pkgs, ... }:
let
commands = import ../../../lib/commands.nix { inherit pkgs; };
inherit (commands) term;
in
{
programs.rofi = {
enable = true;
package = pkgs.rofi-unwrapped;
terminal = term;
};
}

View file

@ -0,0 +1,21 @@
{ pkgs, ... }:
let
commands = import ../../../../lib/commands.nix { inherit pkgs; };
inherit (commands) term;
in
{
imports = [
./theme.nix
];
programs.rofi = {
enable = true;
package = pkgs.rofi-unwrapped;
terminal = term;
extraConfig = {
"run-command" = "${commands.uwsm} {cmd}";
"run-shell-command" = "${commands.uwsm} ${term} -e {cmd}";
};
};
}

View file

@ -0,0 +1,108 @@
{ config, theme, ... }:
let
inherit (config.lib.formats.rasi) mkLiteral;
p = theme.palette;
in
{
programs.rofi.theme = {
"*" = {
background = mkLiteral p.darkestGray;
background-color = mkLiteral p.darkestGray;
foreground = mkLiteral p.lightGray;
lightbg = mkLiteral p.darkerGray;
lightfg = mkLiteral p.lighterGray;
red = mkLiteral p.red;
blue = mkLiteral p.purple;
border-color = mkLiteral "@foreground";
separatorcolor = mkLiteral "@foreground";
normal-background = mkLiteral "@background";
normal-foreground = mkLiteral "@foreground";
normal-text = mkLiteral p.lightGray;
alternate-normal-background = mkLiteral "@lightbg";
alternate-normal-foreground = mkLiteral "@foreground";
alternate-normal-text = mkLiteral p.lightGray;
selected-normal-background = mkLiteral "@lightfg";
selected-normal-foreground = mkLiteral "@lightbg";
selected-normal-text = mkLiteral p.darkerGray;
active-background = mkLiteral "@background";
active-foreground = mkLiteral "@blue";
active-text = mkLiteral p.purple;
alternate-active-background = mkLiteral "@lightbg";
alternate-active-foreground = mkLiteral "@blue";
alternate-active-text = mkLiteral p.purple;
selected-active-background = mkLiteral "@blue";
selected-active-foreground = mkLiteral "@background";
selected-active-text = mkLiteral p.darkestGray;
urgent-background = mkLiteral "@background";
urgent-foreground = mkLiteral "@red";
urgent-text = mkLiteral p.red;
alternate-urgent-background = mkLiteral "@lightbg";
alternate-urgent-foreground = mkLiteral "@red";
alternate-urgent-text = mkLiteral p.red;
selected-urgent-background = mkLiteral "@red";
selected-urgent-foreground = mkLiteral "@background";
selected-urgent-text = mkLiteral p.darkestGray;
base-text = mkLiteral p.lightGray;
};
"button".text-color = mkLiteral "@normal-text";
"button selected" = {
background-color = mkLiteral "@selected-normal-background";
text-color = mkLiteral "@selected-normal-text";
};
"case-indicator".text-color = mkLiteral "@normal-text";
"element alternate.active" = {
background-color = mkLiteral "@alternate-active-background";
text-color = mkLiteral "@alternate-active-text";
};
"element alternate.normal" = {
background-color = mkLiteral "@alternate-normal-background";
text-color = mkLiteral "@alternate-normal-text";
};
"element alternate.urgent" = {
background-color = mkLiteral "@alternate-urgent-background";
text-color = mkLiteral "@alternate-urgent-text";
};
"element normal.active" = {
background-color = mkLiteral "@active-background";
text-color = mkLiteral "@active-text";
};
"element normal.normal" = {
background-color = mkLiteral "@normal-background";
text-color = mkLiteral "@normal-text";
};
"element normal.urgent" = {
background-color = mkLiteral "@urgent-background";
text-color = mkLiteral "@urgent-text";
};
"element selected.active" = {
background-color = mkLiteral "@selected-active-background";
text-color = mkLiteral "@selected-active-text";
};
"element selected.normal" = {
background-color = mkLiteral "@selected-normal-background";
text-color = mkLiteral "@selected-normal-text";
};
"element selected.urgent" = {
background-color = mkLiteral "@selected-urgent-background";
text-color = mkLiteral "@selected-urgent-text";
};
"element-icon" = {
background-color = mkLiteral "inherit";
text-color = mkLiteral "inherit";
};
"element-text" = {
background-color = mkLiteral "inherit";
text-color = mkLiteral "inherit";
};
"entry".text-color = mkLiteral "@normal-text";
"inputbar".text-color = mkLiteral "@normal-text";
"listview".border-color = mkLiteral "@separatorcolor";
"message".border-color = mkLiteral "@separatorcolor";
"prompt".text-color = mkLiteral "@normal-text";
"scrollbar".handle-color = mkLiteral "@normal-foreground";
"sidebar".border-color = mkLiteral "@separatorcolor";
"textbox".text-color = mkLiteral "@base-text";
"textbox-prompt-colon".text-color = mkLiteral "inherit";
"window".background-color = mkLiteral "@background";
};
}

View file

@ -1,10 +1,37 @@
{ ... }:
{ theme, ... }:
let
n = theme.paletteNoHash;
in
{
programs.swaylock = {
enable = true;
settings = {
color = n.darkestGray;
ignore-empty-password = true;
inside-caps-lock-color = n.darkestGray;
inside-clear-color = n.darkestGray;
inside-color = n.darkestGray;
inside-ver-color = n.darkestGray;
inside-wrong-color = n.darkestGray;
indicator-caps-lock = true;
key-hl-color = n.green;
layout-bg-color = n.darkestGray;
layout-border-color = n.darkerGray;
layout-text-color = n.lightGray;
line-uses-inside = true;
ring-caps-lock-color = n.darkerGray;
ring-clear-color = n.red;
ring-color = n.darkerGray;
ring-ver-color = n.green;
ring-wrong-color = n.red;
scaling = "fill";
separator-color = "00000000";
text-caps-lock-color = n.lightGray;
text-clear-color = n.lightGray;
text-color = n.lightGray;
text-ver-color = n.lightGray;
text-wrong-color = n.lightGray;
};
};
}

View file

@ -1,26 +1,19 @@
{ pkgs, ... }:
{ pkgs, pkgs-unstable, ... }:
{
programs.vscodium = {
programs.vscode = {
enable = true;
package = pkgs.vscodium.fhsWithPackages (
package = pkgs-unstable.vscode.fhsWithPackages (
ps: with ps; [ git ]
);
profiles.default = {
userSettings = {
"python.languageServer" = "None";
"python.pyrefly.displayTypeErrors" = "force-on";
"explorer.confirmDelete" = false;
"explorer.confirmDragAndDrop" = false;
"explorer.confirmPasteNative" = false;
"git.confirmSync" = false;
};
extensions = [
pkgs.vscode-extensions.ms-python.python
pkgs.vscode-extensions.ms-python.debugpy
pkgs.vscode-extensions.ms-vscode.cpptools
pkgs.vscode-extensions.jnoortheen.nix-ide
pkgs.vscode-extensions.github.copilot
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
pkgs-unstable.vscode-extensions.ms-python.python
pkgs-unstable.vscode-extensions.ms-python.debugpy
pkgs-unstable.vscode-extensions.ms-vscode.cpptools
pkgs-unstable.vscode-extensions.jnoortheen.nix-ide
pkgs-unstable.vscode-extensions.github.copilot
] ++ pkgs-unstable.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "xonsh";
publisher = "jnoortheen";
@ -30,14 +23,14 @@
{
name = "pyrefly";
publisher = "meta";
version = "0.57.1";
hash = "sha256-aF7QcjpID0PE9gMBM6RGfJ3CHOpmyDuHJbbrRRvLiBI=";
version = "1.0.0";
hash = "sha256-0HMbHW2pFYTXhJH5cJ6JJYSNWXt3t2SxPBEa1J8ThXg=";
}
{
name = "chatgpt";
publisher = "openai";
version = "26.5313.41514";
hash = "sha256-kZHfcMzxqCtvkU04kDrlwaO3uHvn4+V6B5sLzlDfceo=";
version = "26.5519.32039";
hash = "sha256-hJhmLn3AvmY3X3RlbKlpeBX94w8PPm1cuPb3GNvgL/g=";
}
];
};

View file

@ -1,15 +1,19 @@
{ pkgs, ... }:
let
commands = import ../../../lib/commands.nix { inherit pkgs; };
commands = import ../../../../lib/commands.nix { inherit pkgs; };
inherit (commands) uwsm term;
height = 20;
in
{
imports = [
./style.nix
];
programs.waybar = {
enable = true;
systemd = {
enable = true;
targets = [ "graphical-session.target" ];
target = "graphical-session.target";
};
settings.mainBar = {
layer = "bottom";
@ -94,12 +98,5 @@ in
on-click = "${uwsm} pavucontrol";
};
};
style = ''
button {
box-shadow: inset 0 -8px transparent;
border: none;
border-radius: 0;
}
'';
};
}

View file

@ -0,0 +1,62 @@
{ lib, theme, ... }:
let
p = theme.palette;
fonts = theme.fonts;
terminalFontSize = toString fonts.sizes.terminal;
defineColors = lib.concatStringsSep "\n" (
lib.mapAttrsToList (name: value: "@define-color ${name} ${value};") p
);
in
{
programs.waybar.style = ''
${defineColors}
* {
font-family: "${fonts.monospace.name}";
font-size: ${terminalFontSize}pt;
}
window#waybar, tooltip {
background: alpha(@darkestGray, 1.000000);
color: @lightGray;
}
tooltip {
border-color: @purple;
}
tooltip label {
color: @lightGray;
}
.modules-left #workspaces button,
.modules-center #workspaces button,
.modules-right #workspaces button {
border-bottom: 3px solid transparent;
}
.modules-left #workspaces button.focused,
.modules-left #workspaces button.active,
.modules-center #workspaces button.focused,
.modules-center #workspaces button.active,
.modules-right #workspaces button.focused,
.modules-right #workspaces button.active {
border-bottom: 3px solid @lightGray;
}
.modules-left #workspaces button.urgent,
.modules-center #workspaces button.urgent,
.modules-right #workspaces button.urgent {
border-bottom: 3px solid @red;
background-color: @red;
color: @darkestGray;
}
button {
box-shadow: inset 0 -8px transparent;
border: none;
border-radius: 0;
}
'';
}

View file

@ -1,12 +1,21 @@
{ ... }:
{ theme, ... }:
let
p = theme.palette;
fonts = theme.fonts;
fontSize = toString fonts.sizes.applications;
in
{
services.mako = {
enable = true;
settings = {
actions = true;
anchor = "top-center";
background-color = "${p.darkestGray}FF";
border-color = p.purple;
border-radius = 0;
default-timeout = 10000;
font = "${fonts.sansSerif.name} ${fontSize}";
height = 100;
width = 600;
icons = true;
@ -14,6 +23,18 @@
layer = "overlay";
margin = 10;
markup = true;
progress-color = "over ${p.darkGray}";
text-color = p.lightGray;
"urgency=critical" = {
background-color = "${p.darkestGray}FF";
border-color = p.red;
text-color = p.lightGray;
};
"urgency=low" = {
background-color = "${p.darkestGray}FF";
border-color = p.gray;
text-color = p.lightGray;
};
};
};
}

View file

@ -25,11 +25,23 @@ in
command = "${pkgs.systemd}/bin/systemctl suspend";
}
];
events = {
before-sleep = "display off; systemctl --user stop libinput-gestures; ${lock}";
after-resume = "display on; systemctl --user start libinput-gestures";
lock = (display "off") + "; " + lock;
unlock = display "on";
};
events = [
{
event = "before-sleep";
command = "display off; systemctl --user stop libinput-gestures; ${lock}";
}
{
event = "after-resume";
command = "display on; systemctl --user start libinput-gestures";
}
{
event = "lock";
command = (display "off") + "; " + lock;
}
{
event = "unlock";
command = display "on";
}
];
};
}

View file

@ -0,0 +1,11 @@
{ theme, ... }:
{
home.pointerCursor = {
name = theme.cursor.name;
package = theme.cursor.package;
size = theme.cursor.size;
gtk.enable = true;
x11.enable = true;
};
}

View file

@ -0,0 +1,22 @@
{ theme, ... }:
let
fonts = theme.fonts;
fontSize = toString fonts.sizes.applications;
terminalFontSize = toString fonts.sizes.terminal;
in
{
dconf = {
enable = true;
settings."org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
cursor-size = theme.cursor.size;
cursor-theme = theme.cursor.name;
document-font-name = "${fonts.serif.name} 13";
font-name = "${fonts.sansSerif.name} ${fontSize}";
gtk-theme = theme.gtk.theme.name;
icon-theme = theme.icons.dark;
monospace-font-name = "${fonts.monospace.name} ${terminalFontSize}";
};
};
}

View file

@ -0,0 +1,8 @@
{
imports = [
./cursor.nix
./dconf.nix
./fonts.nix
./gtk.nix
];
}

View file

@ -0,0 +1,13 @@
{ theme, ... }:
{
fonts.fontconfig = {
enable = true;
defaultFonts = {
emoji = [ theme.fonts.emoji.name ];
monospace = [ theme.fonts.monospace.name ];
sansSerif = [ theme.fonts.sansSerif.name ];
serif = [ theme.fonts.serif.name ];
};
};
}

View file

@ -0,0 +1,24 @@
{ theme, ... }:
{
gtk = {
enable = true;
font = {
name = theme.fonts.sansSerif.name;
package = theme.fonts.sansSerif.package;
size = theme.fonts.sizes.applications;
};
theme = theme.gtk.theme;
iconTheme = {
name = theme.icons.dark;
package = theme.icons.package;
};
cursorTheme = {
name = theme.cursor.name;
package = theme.cursor.package;
size = theme.cursor.size;
};
gtk3.extraConfig.gtk-application-prefer-dark-theme = 1;
gtk4.extraConfig.gtk-application-prefer-dark-theme = 1;
};
}

View file

@ -6,10 +6,11 @@ in
{
imports = [
./gtk.nix
./theme.nix
./xdg.nix
./shells/default.nix
../../programs/foot.nix
../../programs/qutebrowser.nix
../../programs/qutebrowser
../../services/espanso.nix
../../services/gnome-keyring.nix
];

View file

@ -5,8 +5,8 @@ let
in
{
imports = [
../../../programs/rofi.nix
../../../programs/waybar.nix
../../../programs/rofi
../../../programs/waybar
../../../programs/swaylock.nix
../../../services/swayidle.nix
../../../services/mako.nix

View file

@ -0,0 +1,45 @@
{ theme, ... }:
let
p = theme.palette;
in
{
wayland.windowManager.sway.config.colors = {
background = p.darkestGray;
focused = {
background = p.darkestGray;
border = p.purple;
childBorder = p.purple;
indicator = p.green;
text = p.lightGray;
};
focusedInactive = {
background = p.darkestGray;
border = p.gray;
childBorder = p.gray;
indicator = p.green;
text = p.lightGray;
};
placeholder = {
background = p.darkestGray;
border = p.gray;
childBorder = p.gray;
indicator = p.green;
text = p.lightGray;
};
unfocused = {
background = p.darkestGray;
border = p.gray;
childBorder = p.gray;
indicator = p.green;
text = p.lightGray;
};
urgent = {
background = p.darkestGray;
border = p.red;
childBorder = p.red;
indicator = p.green;
text = p.lightGray;
};
};
}

View file

@ -1,4 +1,4 @@
{ pkgs, ... }:
{ pkgs, pkgs-unstable, ... }:
let
commands = import ../../../../lib/commands.nix { inherit pkgs; };
inherit (commands) swaymsg lock;
@ -28,7 +28,7 @@ in
pkgs.vlc
pkgs.loupe
pkgs.nautilus
pkgs.chromium
pkgs-unstable.chromium
];
defaultApplications = {
"text/*" = [ "${pkgs.gnome-text-editor}/share/applications/org.gnome.TextEditor.desktop" ];

View file

@ -1,4 +1,7 @@
{ pkgs, lib, repoRoot, ... }:
{ pkgs, pkgs-unstable, lib, repoRoot, ... }:
let
bottles = pkgs.bottles.override { removeWarningPopup = true; };
in
{
imports = [
../modules/programs/chromium.nix
@ -6,26 +9,22 @@
../modules/programs/vscode.nix
../modules/services/syncthing.nix
];
stylix.enableReleaseChecks = false;
xdg.configFile."obsidian/obsidian.json".source = lib.mkForce ../conf/obsidian.json;
xdg = {
enable = true;
userDirs = {
enable = true;
setSessionVariables = true;
};
mime.enable = true;
autostart = {
enable = true;
entries = [
"${pkgs.chromium}/share/applications/chromium-browser.desktop"
"${pkgs.discord}/share/applications/discord.desktop"
"${pkgs.signal-desktop}/share/applications/signal.desktop"
"${pkgs.obsidian}/share/applications/obsidian.desktop"
"${pkgs.vscodium}/share/applications/codium.desktop"
"${pkgs-unstable.chromium}/share/applications/chromium-browser.desktop"
"${pkgs-unstable.discord}/share/applications/discord.desktop"
"${pkgs-unstable.signal-desktop}/share/applications/signal.desktop"
"${pkgs-unstable.obsidian}/share/applications/obsidian.desktop"
"${pkgs-unstable.vscode}/share/applications/code.desktop"
];
};
desktopEntries = {

View file

@ -9,6 +9,7 @@
loader.efi.canTouchEfiVariables = true;
initrd = {
enable = true;
systemd.enable = true;
luks.devices."luks-654125f4-7b26-408d-b1b5-d31648ec8770".device = "/dev/disk/by-uuid/654125f4-7b26-408d-b1b5-d31648ec8770";
verbose = false;
};

View file

@ -1,4 +1,8 @@
{ config, pkgs, lib, repoLocalPath, ... }:
let
autoUpgradeUser = "alisceon";
flakeRef = "path:${repoLocalPath}";
in
{
boot = {
kernelPackages = lib.mkDefault pkgs.linuxPackages_latest;
@ -18,25 +22,36 @@
system.autoUpgrade = {
enable = true;
persistent = true;
flake = repoLocalPath;
flake = flakeRef;
upgrade = false;
flags = [
"--print-build-logs"
"--no-write-lock-file"
];
dates = "daily";
dates = "03:40";
fixedRandomDelay = true;
randomizedDelaySec = "2h";
runGarbageCollection = true;
};
systemd.services.nixos-upgrade.preStart = ''
${pkgs.util-linux}/bin/runuser -u ${autoUpgradeUser} -- ${lib.getExe config.nix.package} flake update --flake ${lib.escapeShellArg flakeRef}
'';
nix = {
settings = {
experimental-features = [ "nix-command" "flakes" ];
auto-optimise-store = true;
min-free = 1024 * 1024 * 1024;
max-free = 5 * 1024 * 1024 * 1024;
trusted-users = [ "root" "alisceon" ];
};
gc = {
automatic = true;
persistent = true;
dates = "daily";
options = "--delete-older-than 7d";
dates = "weekly";
randomizedDelaySec = "2h";
options = "--delete-older-than 14d";
};
registry = {
templates.to = {
@ -47,17 +62,19 @@
type = "github";
owner = "NixOS";
repo = "nixpkgs";
ref = "nixos-unstable";
ref = "nixos-25.11";
};
nixpkgs-stable.to = {
type = "github";
owner = "NixOS";
repo = "nixpkgs";
ref = "nixos-25.05";
ref = "nixos-25.11";
};
};
};
boot.loader.systemd-boot.configurationLimit = lib.mkDefault 10;
console.keyMap = "sv-latin1";
networking.networkmanager.enable = true;
time.timeZone = "Europe/Stockholm";

View file

@ -1,6 +1,12 @@
{ pkgs, ... }:
{
system.autoUpgrade.allowReboot = true;
system.autoUpgrade = {
allowReboot = true;
rebootWindow = {
lower = "03:00";
upper = "05:00";
};
};
services.openssh = {
enable = true;

View file

@ -1,7 +1,11 @@
{ pkgs, ... }:
{ pkgs, pkgs-unstable, ... }:
{
boot = {
plymouth.enable = true;
plymouth = {
enable = true;
theme = "nixos-bgrt";
themePackages = [ pkgs.nixos-bgrt-plymouth ];
};
kernelParams = [
"quiet"
"udev.log_level=3"
@ -37,6 +41,11 @@
programs.dconf.enable = true;
users = {
groups.plugdev = {};
users.alisceon.extraGroups = [ "plugdev" ];
};
networking.firewall.allowedTCPPorts = [
1312
8000
@ -46,20 +55,20 @@
environment = {
systemPackages = [
pkgs.discord
pkgs.signal-desktop
pkgs-unstable.discord
pkgs-unstable.signal-desktop
pkgs.mumble
(pkgs.chromium.override { enableWideVine = true; })
(pkgs-unstable.chromium.override { enableWideVine = true; })
pkgs.google-chrome
pkgs.vscodium
pkgs.codex
pkgs-unstable.vscode
pkgs-unstable.codex
pkgs.devenv
pkgs.direnv
pkgs.syncthing
pkgs.steam
pkgs.krita
pkgs.edk2-uefi-shell
pkgs.obsidian
pkgs-unstable.obsidian
pkgs.gparted
pkgs.vlc
pkgs.via

View file

@ -0,0 +1,88 @@
{ pkgs }:
let
dropHash = color:
builtins.substring 1 ((builtins.stringLength color) - 1) color;
palette = {
darkestGray = "#181818";
darkerGray = "#252525";
darkGray = "#3b3b3b";
gray = "#777777";
mutedGray = "#777777";
lightGray = "#b9b9b9";
lighterGray = "#dedede";
white = "#dedede";
red = "#ed4a46";
orange = "#e67f43";
yellow = "#dbb32d";
green = "#70b433";
magenta = "#eb6eb7";
purple = "#a580e2";
blue = "#368aeb";
cyan = "#3fc5b7";
};
paletteNoHash = builtins.mapAttrs (_: dropHash) palette;
in
{
inherit palette paletteNoHash;
colors = {
background = palette.darkestGray;
backgroundAlt = palette.darkerGray;
selection = palette.gray;
foreground = palette.lightGray;
foregroundBright = palette.lighterGray;
error = palette.red;
warning = palette.yellow;
success = palette.green;
accent = palette.purple;
};
polarity = "dark";
fonts = {
monospace = {
package = pkgs.inconsolata;
name = "Inconsolata";
};
sansSerif = {
package = pkgs.noto-fonts;
name = "NotoSans";
};
serif = {
package = pkgs.noto-fonts;
name = "NotoSerif";
};
emoji = {
package = pkgs.noto-fonts-color-emoji;
name = "noto-fonts-color-emoji";
};
sizes = {
applications = 14;
terminal = 14;
desktop = 14;
popups = 14;
};
};
cursor = {
package = pkgs.whitesur-cursors;
name = "WhiteSur-cursors";
size = 20;
};
icons = {
package = pkgs.whitesur-icon-theme;
light = "WhiteSur-light";
dark = "WhiteSur-dark";
};
gtk = {
theme = {
package = pkgs.adw-gtk3;
name = "adw-gtk3";
};
};
}

View file

@ -0,0 +1,6 @@
{
imports = [
./fonts.nix
./home-manager.nix
];
}

View file

@ -0,0 +1,13 @@
{ pkgs, ... }:
let
theme = import ./colors.nix { inherit pkgs; };
in
{
fonts.packages = [
theme.fonts.monospace.package
theme.fonts.sansSerif.package
theme.fonts.serif.package
theme.fonts.emoji.package
];
}

View file

@ -0,0 +1,15 @@
{ pkgs, ... }:
let
theme = import ./colors.nix { inherit pkgs; };
in
{
home-manager.sharedModules = [
({ ... }: {
_module.args.theme = theme;
imports = [
../../../home/modules/theme
];
})
];
}

View file

@ -1,65 +0,0 @@
{ pkgs, ... }:
{
stylix = {
enable = true;
autoEnable = true;
enableReleaseChecks = false;
base16Scheme = {
base00 = "#181818";
base01 = "#252525";
base02 = "#3b3b3b";
base03 = "#777777";
base04 = "#777777";
base05 = "#b9b9b9";
base06 = "#dedede";
base07 = "#dedede";
base08 = "#ed4a46";
base09 = "#e67f43";
base0A = "#dbb32d";
base0B = "#70b433";
base0C = "#eb6eb7";
base0D = "#a580e2";
base0E = "#368aeb";
base0F = "#3fc5b7";
};
polarity = "dark";
fonts = {
monospace = {
package = pkgs.inconsolata;
name = "Inconsolata";
};
sansSerif = {
package = pkgs.noto-fonts;
name = "NotoSans";
};
serif = {
package = pkgs.noto-fonts;
name = "NotoSerif";
};
emoji = {
package = pkgs.noto-fonts-color-emoji;
name = "noto-fonts-color-emoji";
};
sizes = {
applications = 14;
terminal = 14;
desktop = 14;
popups = 14;
};
};
cursor = {
package = pkgs.whitesur-cursors;
name = "WhiteSur-cursors";
size = 20;
};
icons = {
enable = true;
package = pkgs.whitesur-icon-theme;
light = "WhiteSur-light";
dark = "WhiteSur-dark";
};
};
}

View file

@ -1,5 +1,7 @@
{ pkgs, ... }:
{
hardware.uinput.enable = true;
environment.systemPackages = with pkgs; [
pavucontrol
libinput
@ -91,5 +93,5 @@
gvfs.enable = true;
};
users.users.alisceon.extraGroups = [ "video" "input" ];
users.users.alisceon.extraGroups = [ "video" "input" "uinput" ];
}

View file

@ -0,0 +1,36 @@
#!/usr/bin/env bash
set -euo pipefail
repo_root="$(git rev-parse --show-toplevel)"
flake_ref="path:${repo_root}"
# Use a path flake ref so ignored files, especially the local flake.lock, are
# visible to Nix even though the repository itself is a Git worktree.
targets_text="$(
nix eval \
--raw \
--no-write-lock-file \
"${flake_ref}#nixosConfigurations" \
--apply 'configs: builtins.concatStringsSep "\n" (builtins.attrNames configs)'
)"
targets=()
while IFS= read -r target; do
if [ -n "${target}" ]; then
targets+=("${target}")
fi
done <<< "${targets_text}"
if [ "${#targets[@]}" -eq 0 ]; then
echo "No nixosConfigurations found to evaluate." >&2
exit 1
fi
for target in "${targets[@]}"; do
echo "Evaluating nixosConfigurations.${target}.config.system.build.toplevel"
nix eval \
--raw \
--no-write-lock-file \
"${flake_ref}#nixosConfigurations.${target}.config.system.build.toplevel.drvPath" \
>/dev/null
done