Compare commits

...

5 commits

Author SHA1 Message Date
6088d13939
fix dark theme
Some checks failed
ci/woodpecker/push/build-cache Pipeline failed
2025-11-12 15:27:53 +01:00
245c5a7d27 update
Some checks failed
ci/woodpecker/push/build-cache Pipeline failed
2025-11-01 14:08:31 +01:00
9b13868f9a mew
Some checks failed
ci/woodpecker/push/build-cache Pipeline failed
2025-10-30 20:54:22 +01:00
6002b09ca6
moar -> moor
Some checks failed
ci/woodpecker/push/build-cache Pipeline failed
ci/woodpecker/cron/dependency-pr Pipeline was successful
2025-10-27 15:52:41 +01:00
3df730a55a
fix lix
Some checks failed
ci/woodpecker/push/build-cache Pipeline failed
2025-10-27 10:37:19 +01:00
18 changed files with 491 additions and 235 deletions

View file

@ -1,6 +1,11 @@
[language-server.nil] [language-server.nixd]
command = "nil" command = "nixd"
# args = ["--log=debug"]
[language-server.nixd.config.nixd]
nixpkgs = { expr = "import (builtins.getFlake (builtins.toString ./.)).inputs.nixpkgs { }" }
options = { nixos = { expr = "(builtins.getFlake (builtins.toString ./.)).colmenaHive.nodes.theseus.options" }}#, home-manager = { expr = "(builtins.getFlake (builtins.toString ./.)).colmenaHive.nodes.theseus.options.home-manager.users.type.getSubOptions []" } }
[[language]] [[language]]
name = "nix" name = "nix"
formatter = {command = "nixfmt"} formatter = {command = "nixfmt"}
language-servers = [ "nil" ] language-servers = [ "nixd" ]

154
flake.lock generated
View file

@ -16,11 +16,11 @@
"uv2nix": "uv2nix" "uv2nix": "uv2nix"
}, },
"locked": { "locked": {
"lastModified": 1759322529, "lastModified": 1761726959,
"narHash": "sha256-yiv/g/tiJI3PI95F7vhTnaf1TDsIkFLrmmFTjWfb6pQ=", "narHash": "sha256-SGndrZx7I0z4vITH1Arf60OTSfkQVMZRTcRgtPIBVtg=",
"owner": "nix-community", "owner": "nix-community",
"repo": "authentik-nix", "repo": "authentik-nix",
"rev": "69fac057b2e553ee17c9a09b822d735823d65a6c", "rev": "ea1e06f9fe7cbf59c61b2ec4f2979801ff395d8e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -138,11 +138,11 @@
"nixpkgs-lib": "nixpkgs-lib" "nixpkgs-lib": "nixpkgs-lib"
}, },
"locked": { "locked": {
"lastModified": 1756770412, "lastModified": 1760948891,
"narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "4524271976b625a4a605beefd893f270620fd751", "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -277,11 +277,11 @@
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1761141169, "lastModified": 1762101621,
"narHash": "sha256-5IZjbTvP5dNTD8CbEYlNbicdGcbCN9SC9ksMm2ZEXH0=", "narHash": "sha256-LEzstw3bcMYdOo12SwjTmUV0jfEKGbxleHllW1yHMx4=",
"owner": "helix-editor", "owner": "helix-editor",
"repo": "helix", "repo": "helix",
"rev": "d79cce4e4bfc24dd204f1b294c899ed73f7e9453", "rev": "7895719e5c3299a408bac461437c5040849f430b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -297,11 +297,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1761191301, "lastModified": 1762178366,
"narHash": "sha256-xsRL2Oyb4YRZZ1Tu4WzR2uFg1n931bH+PfLdFcqtLg8=", "narHash": "sha256-I+8yE5HVR2SFcHnW0771psQ/zn0qVzsKHY/gUM0nEVM=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "4958aafe7b237dc1e857fb0c916efff72075048f", "rev": "8c824254b1ed9e797f6235fc3c62f365893c561a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -378,7 +378,9 @@
"nixpkgs" "nixpkgs"
], ],
"pre-commit-hooks-nix": "pre-commit-hooks-nix", "pre-commit-hooks-nix": "pre-commit-hooks-nix",
"rust-overlay": "rust-overlay_2" "rust-overlay": [
"rust-overlay"
]
}, },
"locked": { "locked": {
"lastModified": 1737639419, "lastModified": 1737639419,
@ -398,11 +400,11 @@
"mobile-nixos": { "mobile-nixos": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1759261417, "lastModified": 1761853569,
"narHash": "sha256-TjuoBb8+isL3KTdGgtYh90XPyeUMFbgNAOG9l23CB3A=", "narHash": "sha256-miiMKVgC2WVi4ItD8rWD0ngou5WicEDAuZGhI0TfEIw=",
"owner": "mobile-nixos", "owner": "mobile-nixos",
"repo": "mobile-nixos", "repo": "mobile-nixos",
"rev": "e6f6d527bf6abf94dd52fbba3143a720cef96431", "rev": "1e38d4027bbb944f2af1b3241eabd9ad9c950c84",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -456,11 +458,11 @@
"nheko": { "nheko": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1757886200, "lastModified": 1762138523,
"narHash": "sha256-FU73Pb47e6Q0qEAJcxDVhVLmL+hJ4gXvssRD9NcUNkM=", "narHash": "sha256-93M4T6peRRMq0uL0X955+N0KnU1t/0AAyVQ/TV2zpQs=",
"owner": "Nheko-Reborn", "owner": "Nheko-Reborn",
"repo": "nheko", "repo": "nheko",
"rev": "2769642d3c7bd3c0d830b2f18ef6b3bf6a710bf4", "rev": "1bd2970c4dd69daa87d906f63d869d56cf5d4915",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -474,14 +476,14 @@
"nixpkgs": [ "nixpkgs": [
"nixpkgs-master" "nixpkgs-master"
], ],
"rust-overlay": "rust-overlay_3" "rust-overlay": "rust-overlay_2"
}, },
"locked": { "locked": {
"lastModified": 1760940149, "lastModified": 1762146685,
"narHash": "sha256-KbM47vD6E0cx+v4jYQZ8mD5N186AKm2CQlyh34TW58U=", "narHash": "sha256-anRlNG6t7esBbF1+ALDeathVBSclA0PEL52Vo0WnN5g=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "b3245b81a6ed8edfaf5388a74d2e0a23c24941e5", "rev": "a2ca2b3c866bc781b12c334a9f949b3db6d7c943",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -495,7 +497,7 @@
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
"rust-overlay": "rust-overlay_4" "rust-overlay": "rust-overlay_3"
}, },
"locked": { "locked": {
"lastModified": 1760113386, "lastModified": 1760113386,
@ -518,11 +520,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1760846226, "lastModified": 1762055842,
"narHash": "sha256-xmU8kAsRprJiTGBTaGrwmjBP3AMA9ltlrxHKFuy5JWc=", "narHash": "sha256-Pu1v3mlFhRzZiSxVHb2/i/f5yeYyRNqr0RvEUJ4UgHo=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-index-database", "repo": "nix-index-database",
"rev": "5024e1901239a76b7bf94a4cd27f3507e639d49e", "rev": "359ff6333a7b0b60819d4c20ed05a3a1f726771f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -533,11 +535,11 @@
}, },
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1760958188, "lastModified": 1761933221,
"narHash": "sha256-2m1S4jl+GEDtlt2QqeHil8Ny456dcGSKJAM7q3j/BFU=", "narHash": "sha256-rNHeoG3ZrA94jczyLSjxCtu67YYPYIlXXr0uhG3wNxM=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "d6645c340ef7d821602fd2cd199e8d1eed10afbc", "rev": "7467f155fcba189eb088a7601f44fbef7688669b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -549,11 +551,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1761114652, "lastModified": 1761907660,
"narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=", "narHash": "sha256-kJ8lIZsiPOmbkJypG+B5sReDXSD1KGu2VEPNqhRa/ew=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c", "rev": "2fb006b87f04c4d3bdf08cfdbc7fab9c13d94a15",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -580,11 +582,11 @@
}, },
"nixpkgs-master": { "nixpkgs-master": {
"locked": { "locked": {
"lastModified": 1761228883, "lastModified": 1762178406,
"narHash": "sha256-8jKkT4Yc8I/PnDczaD9diDcJkckwP7WAstQcYbMSo4s=", "narHash": "sha256-slFOJNvXh2Zx9hK2MIt1Ftv58l8CLNB3aRc7/dheECk=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "0cfbb4d10f6e813e6e9750fbf5396747cf3b6212", "rev": "85707117647f95fa34842965fcd534a7e882918b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -653,11 +655,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1757296493, "lastModified": 1759113590,
"narHash": "sha256-6nzSZl28IwH2Vx8YSmd3t6TREHpDbKlDPK+dq1LKIZQ=", "narHash": "sha256-fgxP2RCN4cg0jYiMYoETYc7TZ2JjgyvJa2y9l8oSUFE=",
"owner": "pyproject-nix", "owner": "pyproject-nix",
"repo": "build-system-pkgs", "repo": "build-system-pkgs",
"rev": "5b8e37fe0077db5c1df3a5ee90a651345f085d38", "rev": "dbfc0483b5952c6b86e36f8b3afeb9dde30ea4b5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -674,11 +676,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1757246327, "lastModified": 1760402624,
"narHash": "sha256-6pNlGhwOIMfhe/RLjHdpXveKS4FyLHvlGe+KtjDild4=", "narHash": "sha256-jF6UKLs2uGc2rtved8Vrt58oTWjTQoAssuYs/0578Z4=",
"owner": "pyproject-nix", "owner": "pyproject-nix",
"repo": "pyproject.nix", "repo": "pyproject.nix",
"rev": "8d77f342d66ad1601cdb9d97e9388b69f64d4c8e", "rev": "84c4ea102127c77058ea1ed7be7300261fafc7d2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -705,6 +707,7 @@
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nixpkgs-master": "nixpkgs-master", "nixpkgs-master": "nixpkgs-master",
"rust-overlay": "rust-overlay_4",
"sops-nix": "sops-nix", "sops-nix": "sops-nix",
"terranix": "terranix", "terranix": "terranix",
"xwayland-satellite": "xwayland-satellite", "xwayland-satellite": "xwayland-satellite",
@ -733,27 +736,6 @@
} }
}, },
"rust-overlay_2": { "rust-overlay_2": {
"inputs": {
"nixpkgs": [
"lanzaboote",
"nixpkgs"
]
},
"locked": {
"lastModified": 1731897198,
"narHash": "sha256-Ou7vLETSKwmE/HRQz4cImXXJBr/k9gp4J4z/PF8LzTE=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "0be641045af6d8666c11c2c40e45ffc9667839b5",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_3": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"niri", "niri",
@ -774,7 +756,7 @@
"type": "github" "type": "github"
} }
}, },
"rust-overlay_4": { "rust-overlay_3": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nix-ci", "nix-ci",
@ -795,6 +777,26 @@
"type": "github" "type": "github"
} }
}, },
"rust-overlay_4": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1762137611,
"narHash": "sha256-sTqb10FR/YQCuGbw16qxliX0NFlYg6evSEjN8w+9IYE=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "3a0ebe5d2965692f990cb27e62f501ad35e3deeb",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_5": { "rust-overlay_5": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -906,11 +908,11 @@
"systems": "systems_2" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1757278723, "lastModified": 1762161791,
"narHash": "sha256-hTMi6oGU+6VRnW9SZZ+muFcbfMEf2ajjOp7Z2KM5MMY=", "narHash": "sha256-J1L1yP29NVBJO04LA/JGM6kwhnjeNhEsX0tLFnuN3FI=",
"owner": "terranix", "owner": "terranix",
"repo": "terranix", "repo": "terranix",
"rev": "924573fa6587ac57b0d15037fbd2d3f0fcdf17fb", "rev": "a79a47b4617dfb92184e2e5b8f5aa6fc06c659c8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -931,11 +933,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1757925761, "lastModified": 1761101082,
"narHash": "sha256-7Hwz0vfHuFqCo5v7Q07GQgLBWuPvZCuf/5/pk4NoADg=", "narHash": "sha256-4Kt3RsfJgg6HzmDCc44ZN//xB8n7KGEGxxt9dNjqPQc=",
"owner": "pyproject-nix", "owner": "pyproject-nix",
"repo": "uv2nix", "repo": "uv2nix",
"rev": "780494c40895bb7419a73d942bee326291e80b3b", "rev": "e6e728d9719e989c93e65145fe3f9e0c65a021a2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -953,11 +955,11 @@
"rust-overlay": "rust-overlay_5" "rust-overlay": "rust-overlay_5"
}, },
"locked": { "locked": {
"lastModified": 1761173223, "lastModified": 1761622056,
"narHash": "sha256-FumZh+fPRaKXkl9Y1uTh5KV7Io/AyOZso+UkqLhLArs=", "narHash": "sha256-fBrUszJXmB4MY+wf3QsCnqWHcz7u7fLq0QMAWCltIQg=",
"owner": "Supreeeme", "owner": "Supreeeme",
"repo": "xwayland-satellite", "repo": "xwayland-satellite",
"rev": "bf745144acda1343934e9a094cf9458a54d57889", "rev": "0728d59ff6463a502e001fb090f6eb92dbc04756",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -974,11 +976,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1761180075, "lastModified": 1762131860,
"narHash": "sha256-V4WLeUQ4gCGZiVihlXWBOZ/1FNcL0jM4zgTY1haJLvY=", "narHash": "sha256-sIPhzkDrfe6ptthZiwoxQyO6rKd9PgJnl+LOyythQkI=",
"owner": "0xc000022070", "owner": "0xc000022070",
"repo": "zen-browser-flake", "repo": "zen-browser-flake",
"rev": "771a2604606905d8c0ffe3b818dc2cc5bd1405d8", "rev": "10e69cb268b1d3dc91135e72f5462b2acfbcc3aa",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -16,11 +16,16 @@
colmena.inputs.nixpkgs.follows = "nixpkgs"; colmena.inputs.nixpkgs.follows = "nixpkgs";
# software # software
rust-overlay = { # https://github.com/nix-community/lanzaboote/issues/485#issuecomment-3466684727
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
lanzaboote = { lanzaboote = {
url = "github:nix-community/lanzaboote/v0.4.2"; url = "github:nix-community/lanzaboote/v0.4.2";
# Optional but recommended to limit the size of your system closure. # Optional but recommended to limit the size of your system closure.
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
inputs.rust-overlay.follows = "rust-overlay";
}; };
zen-browser.url = "github:0xc000022070/zen-browser-flake"; zen-browser.url = "github:0xc000022070/zen-browser-flake";
@ -113,11 +118,19 @@
importConfigs = importConfigs =
n: n:
map (x: { map (x: {
${x} = {nodes, ...}: { ${x} =
networking.hostName = x; { nodes, pkgs, ... }:
imports = modules ++ [ (./instances/${x}) ]; {
_module.args.otherNodes = lib.filterAttrs (n: v: n != x) nodes; nixpkgs.overlays = overlays;
}; nix.package = pkgs.unstable.lixPackageSets.latest.lix;
networking.hostName = x;
imports = modules ++ [ (./instances/${x}) ];
_module.args.otherNodes = lib.filterAttrs (n: v: n != x) nodes;
deployment.privilegeEscalationCommand = [
"run0"
"--unit=colmena-apply"
];
};
}) n; }) n;
in in
lib.foldl' lib.recursiveUpdate { } ( lib.foldl' lib.recursiveUpdate { } (
@ -130,10 +143,6 @@
specialArgs = { inherit inputs; }; specialArgs = { inherit inputs; };
nixpkgs = genPkgs "x86_64-linux"; nixpkgs = genPkgs "x86_64-linux";
}; };
deployment.privilegeEscalationCommand = [
"run0"
"--unit=colmena-apply"
];
} }
(importConfigs [ (importConfigs [
"ds9" "ds9"
@ -178,6 +187,7 @@
devShells.${system}.default = pkgs.mkShell { devShells.${system}.default = pkgs.mkShell {
packages = [ packages = [
pkgs.nixfmt-rfc-style pkgs.nixfmt-rfc-style
pkgs.nixd
pkgs.nil pkgs.nil
pkgs.sops pkgs.sops
(pkgs.runCommand "nix-config-bin" { } '' (pkgs.runCommand "nix-config-bin" { } ''

View file

@ -23,10 +23,10 @@ in
gtk4.extraConfig.gtk-application-prefer-dark-theme = 1; gtk4.extraConfig.gtk-application-prefer-dark-theme = 1;
gtk3.extraConfig.gtk-application-prefer-dark-theme = 1; gtk3.extraConfig.gtk-application-prefer-dark-theme = 1;
}; };
qt = { # qt = {
enable = true; # enable = true;
style.name = "breeze"; # style.name = "breeze";
}; # };
}; };
} }

View file

@ -362,7 +362,7 @@ in
"user-filters" = "user-filters" =
''marketplace.visualstudio.com##+js(rpnt, script, /"(DisableVSCodeDownloadButtonEnabled|Microsoft\\.VisualStudio\\.Services\\.Gallery\\.DisableVSCodeDownloadButton)":true/, "$1":false)''; ''marketplace.visualstudio.com##+js(rpnt, script, /"(DisableVSCodeDownloadButtonEnabled|Microsoft\\.VisualStudio\\.Services\\.Gallery\\.DisableVSCodeDownloadButton)":true/, "$1":false)'';
"hostnameSwitchesString" = "hostnameSwitchesString" =
"no-large-media: behind-the-scene false\nno-remote-fonts: * true\nno-csp-reports: * true"; "no-large-media: behind-the-scene false\nno-remote-fonts: * false\nno-csp-reports: * true";
}; };
}; };

View file

@ -9,13 +9,14 @@ in
{ {
options.xyno.git.enable = lib.mkEnableOption "xynos git config"; options.xyno.git.enable = lib.mkEnableOption "xynos git config";
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
programs.difftastic.git.enable = true;
programs.difftastic.enable = true;
programs.git = { programs.git = {
enable = true; enable = true;
difftastic.enable = true;
lfs.enable = true; lfs.enable = true;
# Default configs # Default configs
extraConfig = { settings = {
commit.gpgSign = true; commit.gpgSign = true;
gpg.format = "ssh"; gpg.format = "ssh";

View file

@ -22,20 +22,21 @@ in
# nodePackages_latest.prettier # nodePackages_latest.prettier
dprint dprint
markdown-oxide markdown-oxide
codebook # codebook
## python ## python
# ruff-lsp # ruff-lsp
# nodePackages_latest.pyright # nodePackages_latest.pyright
# inputs.csharp-language-server.packages.${pkgs.system}.csharp-language-server # inputs.csharp-language-server.packages.${pkgs.system}.csharp-language-server
] ]
++ (optionals cfg.withLargeLSPs [ ++ (optionals cfg.withLargeLSPs [
netcoredbg
nodePackages_latest.typescript-language-server nodePackages_latest.typescript-language-server
nodePackages_latest.vscode-langservers-extracted nodePackages_latest.vscode-langservers-extracted
typescript typescript
# jsonnet-language-server # jsonnet-language-server
# jsonnet # jsonnet
lazygit lazygit
ltex-ls-plus # languagetool
tinymist # typst lsp
]); ]);
programs.helix = { programs.helix = {
@ -107,8 +108,7 @@ in
keys = { keys = {
normal = { normal = {
space."=" = ":fmt"; space."=" = ":fmt";
"C-g" = "C-g" = ":sh tmux popup -d \"#{pane_current_path}\" -xC -yC -w80%% -h80%% -E lazygit";
":sh tmux popup -d \"#{pane_current_path}\" -xC -yC -w80%% -h80%% -E lazygit";
"C-t" = ":sh tmux split-window -v -l '35%%'"; "C-t" = ":sh tmux split-window -v -l '35%%'";
"C-h" = ":sh tmux select-pane -t '{left-of}'"; "C-h" = ":sh tmux select-pane -t '{left-of}'";
"C-l" = ":sh tmux select-pane -t '{right-of}'"; "C-l" = ":sh tmux select-pane -t '{right-of}'";
@ -143,55 +143,143 @@ in
language-server.csharp = { language-server.csharp = {
command = "csharp-language-server"; command = "csharp-language-server";
}; };
language-server.codebook = { language-server.ltex = {
command = "codebook-lsp"; command = "ltex-ls-plus";
args = ["serve"]; config = {
}; additionalRules.motherTongue = "de-DE";
language = flatten [ additionalRules.enablePickyRules = true;
(map language = [
(x: { "en-US"
name = x; "de-DE"
language-servers = [
"typescript-language-server"
"eslint"
];
#formatter = { command = "dprint"; args = [ "fmt" "--stdin" x ]; };
# formatter = { command = "prettier"; args = [ "--parser" "typescript" ]; };
})
[
"typescript"
"javascript"
"jsx"
"tsx"
]
)
{
name = "nix";
formatter = {
command = "nixpkgs-fmt";
};
}
{
name = "python";
language-servers = [
"pyright"
"ruff"
]; ];
} };
{ };
name = "markdown"; language-server.tinymist = {
language-servers = ["codebook"]; command = "tinymist";
} };
{ # language-server.nil = {
name = "c-sharp"; # command = "nil";
language-servers = [ "csharp" ]; # config.nil.nix = {
formatter = { # maxMemoryMB = 5120;
command = "dotnet"; # flake = {
args = [ "csharpier" ]; # autoEvalInputs = true;
}; # autoArchive = true;
# };
# };
# };
language =
let
applySingleConfig =
languages: config:
let
applied =
foldl'
(
acc: l:
if (any (x: l.name == x) config.languages) then
{
done = acc.done ++ [
(mkMerge [
l
config.conf
])
];
notFound = filter (x: x != l.name) acc.notFound;
}
else
{
done = acc.done ++ [ l ];
notFound = acc.notFound;
}
)
{
done = [ ];
notFound = config.languages;
}
languages;
in
applied.done ++ (map (x: { name = x; } // config.conf) applied.notFound);
applyConfs = lspConfs: languages: foldl' applySingleConfig languages lspConfs;
in
applyConfs
[
{
languages = [
"typescript"
"javascript"
"jsx"
"tsx"
];
conf = {
language-servers = [
"typescript-language-server"
"eslint"
];
};
}
{
languages = [
"markdown"
"typst"
"bibtex"
"comment"
"latex"
"html"
];
conf = {
language-servers = [
"ltex"
];
};
}
]
[
{
name = "__common__";
scope = "source.__common__";
file-types = [ ];
language-servers = [
"ltex"
];
}
# {
# name = "nix";
# language-servers = [
# "nixd"
# ];
# formatter = {
# command = "nixpkgs-fmt";
# };
# }
{
name = "python";
language-servers = [
"pyright"
"ruff"
];
}
{
name = "markdown";
language-servers = [
"markdown-oxide"
];
}
{
name = "typst";
language-servers = [
"tinymist"
];
}
{
name = "c-sharp";
language-servers = [ "csharp" ];
formatter = {
command = "dotnet";
args = [ "csharpier" ];
};
} }
]; ];
}; };
}; };
}; };

View file

@ -14,6 +14,11 @@ in
programs.mpv = { programs.mpv = {
enable = true; enable = true;
scripts = with pkgs.mpvScripts; [ mpv-webm sponsorblock ]; scripts = with pkgs.mpvScripts; [ mpv-webm sponsorblock ];
config = {
profile = "gpu-hq";
ytdl-format = "bestvideo[width<=1920]+bestaudio";
cache-secs = 1200;
};
}; };
}; };

View file

@ -48,7 +48,7 @@ in
pandoc pandoc
tectonic tectonic
rquickshare rquickshare
supersonic-wayland unstable.supersonic-wayland
nheko nheko
anki-bin anki-bin
gimp3 gimp3
@ -64,14 +64,15 @@ in
time.timeZone = "Europe/Berlin"; time.timeZone = "Europe/Berlin";
# orcaslicer # orcaslicer
networking.firewall.allowedTCPPorts = [ networking.firewall.allowedTCPPorts = [
1880 1880
2021 2021
4711
]; ];
networking.firewall.allowedUDPPorts = [ networking.firewall.allowedUDPPorts = [
1880 1880
5353
2021 2021
]; ];

View file

@ -16,7 +16,7 @@
"${inputs.nixos-hardware}/framework/13-inch/7040-amd" "${inputs.nixos-hardware}/framework/13-inch/7040-amd"
]; ];
hardware.framework.laptop13.audioEnhancement.enable = true; hardware.framework.laptop13.audioEnhancement.enable = true;
# hardware.framework.laptop13.audioEnhancement.hideRawDevice = false; hardware.framework.laptop13.audioEnhancement.hideRawDevice = false;
services.fwupd.enable = true; services.fwupd.enable = true;
boot.initrd.availableKernelModules = [ boot.initrd.availableKernelModules = [

View file

@ -229,9 +229,39 @@ in
]; ];
}; };
}; };
configPackages = [
(pkgs.writeTextDir "share/pipewire/pipewire.conf.d/snapcast-discover.conf" ''
context.modules = [
{
name = libpipewire-module-snapcast-discover
args = {
snapcast.discover-local = true
stream.rules = [
{
matches = [
{
snapcast.ip = "~.*"
}
]
actions = {
create-stream = {
# node.name = "Snapcast"
# snapcast.stream-name = "default"
}
}
}
]
}
}
]
'')
];
wireplumber.extraConfig."98-bluetooth"."wireplumber.settings"."bluetooth.autoswitch-to-headset-profile" = wireplumber.extraConfig."98-bluetooth"."wireplumber.settings"."bluetooth.autoswitch-to-headset-profile" =
false; false;
wireplumber.configPackages = mapAttrsToList (n: v: eqPkg v) cfg.eq; wireplumber.configPackages = mapAttrsToList (n: v: eqPkg v) cfg.eq ++ [
];
}; };
}; };

View file

@ -1,27 +0,0 @@
{
pkgs,
config,
lib,
...
}:
let
cfg = config.xyno.desktop.fcitx5;
in
{
options.xyno.desktop.fcitx5.enable = lib.mkEnableOption "enable fcitx5 input daemon thing";
config = lib.mkIf cfg.enable {
i18n.inputMethod = {
type = "fcitx5";
enable = true;
fcitx5.addons = with pkgs; [
fcitx5-table-other
];
fcitx5.waylandFrontend = true;
fcitx5.quickPhrase = {
":pleading:" = "🥺";
":pointing_right:" = "👉";
":pointing_left:" = "👈";
};
};
};
}

81
modules/desktop/ibus.nix Normal file
View file

@ -0,0 +1,81 @@
{
pkgs,
config,
lib,
...
}:
with lib;
let
cfg = config.xyno.desktop.ibus;
in
{
options.xyno.desktop.ibus.enable = mkEnableOption "enable ibus input daemon thing";
options.xyno.desktop.ibus.wantedBy = mkOption {
type = types.str;
default = "niri.service";
};
config = mkIf cfg.enable {
services.libinput.enable = true;
# just... enable ibus as input method and maybe now we have consistent unicode input everywhere
# fuck qt tbh
i18n.inputMethod = {
enable = true;
package = pkgs.ibus-patched;
# ibus.engines = with pkgs.ibus-engines; [ uniemoji ];
};
# home-manager.sharedModules = [
# (
# { lib, ... }:
# {
# dconf.settings = {
# "org/gnome/desktop/input-sources" = {
# sources = [
# (lib.hm.gvariant.mkTuple [
# "xkb"
# "us"
# ])
# (lib.hm.gvariant.mkTuple [
# "ibus"
# "libpinyin"
# ])
# (lib.hm.gvariant.mkTuple [
# "ibus"
# "mozc-jp"
# ])
# ];
# };
# };
# }
# )
# ];
systemd.user.services."org.freedesktop.IBus.session.generic".wantedBy = [ cfg.wantedBy ];
systemd.packages = [ pkgs.ibus-patched ];
# systemd.user.services.ibus =
# let
# ibusPackage = config.i18n.inputMethod.package;
# in
# assert hasPrefix "ibus-with-plugins" ibusPackage.name;
# {
# # panel is weird...
# # default is ${ibusPackage}/libexec/ibus-ui-gtk3 which works but sends a notification that it's misconfigured
# # wayland support can be enabled with --enable-wayland-im but that segfaults (possible due to zwp_input_method_v1 not being available?)
# script = ''
# exec ${ibusPackage}/bin/ibus-daemon --xim --replace --panel '${ibusPackage}/libexec/ibus-ui-gtk3'
# '';
# serviceConfig = {
# Type = "dbus";
# BusName = "org.freedesktop.IBus";
# Restart = "on-abnormal";
# };
# unitConfig = {
# CollectMode = "inactive-or-failed";
# };
# # yeah we hardcoding this now, fuck it
# wantedBy = [ cfg.wantedBy ];
# partOf = [ "graphical-session.target" ];
# };
};
}

View file

@ -14,6 +14,8 @@ let
"KeePassXC" "KeePassXC"
"org.gnome.NautilusPreviewer" "org.gnome.NautilusPreviewer"
"io.github.Qalculate.qalculate-qt" "io.github.Qalculate.qalculate-qt"
"ibus-ui-emojier"
"ibus-ui-gtk3"
]; ];
matchFloat = concatStringsSep "\n" ( matchFloat = concatStringsSep "\n" (
map (x: '' map (x: ''
@ -52,20 +54,22 @@ in
value = 1; value = 1;
} }
]; ];
home-manager.users.${config.xyno.system.user.name} = mkIf config.xyno.presets.home-manager.enable ( home-manager.sharedModules = [
{ ... }: (
{ { ... }:
xyno.dark-theme.enable = true; {
# home.file.".config/xdg-desktop-portal-termfilechooser/config".text = '' xyno.dark-theme.enable = true;
# [filechooser] # home.file.".config/xdg-desktop-portal-termfilechooser/config".text = ''
# cmd=${pkgs.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh # [filechooser]
# default_dir=$HOME # cmd=${pkgs.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh
# env=TERMCMD=footclient --app-id floating-alacritty # default_dir=$HOME
# open_mode = suggested # env=TERMCMD=footclient --app-id floating-alacritty
# save_mode = suggested # open_mode = suggested
# ''; # save_mode = suggested
} # '';
); }
)
];
xdg.portal = { xdg.portal = {
extraPortals = [ extraPortals = [
@ -88,7 +92,16 @@ in
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
playerctl playerctl
xwayland-satellite xwayland-satellite
nirius
]; ];
systemd.user.services.niriusd = {
unitConfig.PartOf = "graphical-session.target";
unitConfig.After = "graphical-session.target";
unitConfig.Requisite = "graphical-session.target";
serviceConfig.Restart = "on-failure";
wantedBy = [ "niri.service" ];
script = "exec ${pkgs.nirius}/bin/niriusd";
};
programs.niri.enable = true; programs.niri.enable = true;
environment.etc."niri/config.kdl".mode = "444"; # copy file so niri detects changes environment.etc."niri/config.kdl".mode = "444"; # copy file so niri detects changes
environment.etc."niri/config.kdl".text = '' environment.etc."niri/config.kdl".text = ''
@ -105,11 +118,15 @@ in
Mod+T { spawn "${cfg.term}" "tmux" "new-session" "-t" "main"; } Mod+T { spawn "${cfg.term}" "tmux" "new-session" "-t" "main"; }
Mod+Shift+T { spawn "${cfg.term}"; } Mod+Shift+T { spawn "${cfg.term}"; }
Mod+Y { spawn "${cfg.term}" "--app-id" "floating-alacritty" "-W" "120x37" "yazi"; } Mod+Y { spawn "${cfg.term}" "--app-id" "floating-alacritty" "-W" "120x37" "yazi"; }
Mod+Shift+M { spawn "sh" "-c" "notify-send -t 3000 -a umpv umpv-paste $(wl-paste); umpv $(wl-paste)"; }
Mod+P { spawn "keepassxc"; } Mod+P { spawn "keepassxc"; }
Mod+S { spawn "qalculate-qt"; } Mod+S { spawn "qalculate-qt"; }
Mod+Shift+N { spawn "makoctl" "dismiss" "-a"; } Mod+Shift+N { spawn "makoctl" "dismiss" "-a"; }
Mod+N { spawn "makoctl" "dismiss"; } Mod+N { spawn "makoctl" "dismiss"; }
Mod+E { spawn "makoctl" "menu" "fuzzel -d"; } Mod+E { spawn "makoctl" "menu" "fuzzel -d"; }
Mod+G { spawn "nirius" "toggle-follow-mode"; }
Mod+Shift+bracketleft { spawn "nirius" "scratchpad-show"; }
Mod+Shift+bracketright { spawn "nirius" "scratchpad-toggle"; }
XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.03+"; } XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.03+"; }
XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.03-"; } XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.03-"; }
XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; } XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }

View file

@ -5,9 +5,9 @@
./desktop/audio.nix ./desktop/audio.nix
./desktop/common-programs.nix ./desktop/common-programs.nix
./desktop/easyeffects.nix ./desktop/easyeffects.nix
./desktop/fcitx5.nix
./desktop/foot.nix ./desktop/foot.nix
./desktop/fuzzel.nix ./desktop/fuzzel.nix
./desktop/ibus.nix
./desktop/mako.nix ./desktop/mako.nix
./desktop/niri.nix ./desktop/niri.nix
./desktop/shikane.nix ./desktop/shikane.nix
@ -21,8 +21,8 @@
./presets/common.nix ./presets/common.nix
./presets/development.nix ./presets/development.nix
./presets/gui.nix ./presets/gui.nix
./presets/server.nix
./presets/home-manager.nix ./presets/home-manager.nix
./presets/server.nix
./services/authentik ./services/authentik
./services/caddy ./services/caddy
./services/monitoring.nix ./services/monitoring.nix
@ -30,8 +30,8 @@
./system/impermanence.nix ./system/impermanence.nix
./system/meta.nix ./system/meta.nix
./system/user.nix ./system/user.nix
./to-upstream/fido2-hid-bridge.nix
./user-services/khal.nix ./user-services/khal.nix
./user-services/syncthing.nix ./user-services/syncthing.nix
./to-upstream/fido2-hid-bridge.nix
] ]

View file

@ -130,7 +130,7 @@ in
imagemagick imagemagick
jq jq
lm_sensors lm_sensors
moar moor
neofetch neofetch
nix-output-monitor nix-output-monitor
poppler poppler
@ -145,7 +145,7 @@ in
programs.mosh.enable = true; programs.mosh.enable = true;
environment.variables.EDITOR = "hx"; environment.variables.EDITOR = "hx";
environment.variables.VISUAL = "hx"; environment.variables.VISUAL = "hx";
environment.variables.PAGER = "moar"; environment.variables.PAGER = "moor";
environment.shellAliases = { environment.shellAliases = {
l = "ls -alh"; l = "ls -alh";
@ -161,7 +161,7 @@ in
p = "cd ~/proj"; p = "cd ~/proj";
ytl = ''yt-dlp -f "bv*+mergeall[vcodec=none]" --audio-multistreams''; ytl = ''yt-dlp -f "bv*+mergeall[vcodec=none]" --audio-multistreams'';
sudo = "run0"; sudo = "run0";
less = "moar"; less = "moor";
}; };
}; };
} }

View file

@ -21,6 +21,7 @@ in
pkgs.yubikey-personalization pkgs.yubikey-personalization
]; ];
xyno.desktop.niri.enable = true; xyno.desktop.niri.enable = true;
xyno.desktop.ibus.enable = true;
xyno.desktop.audio.enable = mkDefault true; xyno.desktop.audio.enable = mkDefault true;
xyno.user-services.khal.enable = true; xyno.user-services.khal.enable = true;
boot.kernelPackages = mkDefault pkgs.linuxPackages_zen; boot.kernelPackages = mkDefault pkgs.linuxPackages_zen;
@ -40,9 +41,35 @@ in
qt = { qt = {
enable = true; enable = true;
style = "breeze"; platformTheme = "qt5ct";
# platformTheme = "gnome";
}; };
home-manager.sharedModules =
let
gruvboxDarkColors = pkgs.writeText "gruvbox-dark.conf" ''
[ColorScheme]
active_colors=#ffebdbb2, #ff1d2021, #ffbdae93, #ffa89984, #ff3c3836, #ff504945, #ffebdbb2, #ffebdbb2, #ffebdbb2, #ff282828, #ff1d2021, #ff504945, #ff458588, #ff282828, #ff458588, #ffcc241d, #ff282828, #ffebdbb2, #ff1d2021, #ffebdbb2, #ffbdae93
disabled_colors=#ffbdae93, #ff1d2021, #ffbdae93, #ffa89984, #ff3c3836, #ff504945, #ffbdae93, #ffbdae93, #ffbdae93, #ff282828, #ff1d2021, #ff504945, #ff438184, #ff3c3836, #ff458588, #ffcc241d, #ff282828, #ffebdbb2, #ff1d2021, #ffebdbb2, #ffbdae93
inactive_colors=#ffebdbb2, #ff1d2021, #ffbdae93, #ffa89984, #ff3c3836, #ff504945, #ffebdbb2, #ffebdbb2, #ffebdbb2, #ff282828, #ff1d2021, #ff504945, #ff438184, #ffa89984, #ff458588, #ffcc241d, #ff282828, #ffebdbb2, #ff1d2021, #ffebdbb2, #ffbdae93
'';
qt5ctConf = pkgs.writeText "qt5ct.conf" ''
[Appearance]
color_scheme_path=${gruvboxDarkColors}
custom_palette=true
icon_theme=breeze-dark
standard_dialogs=xdgdesktopportal
style=Breeze
[Fonts]
fixed="Source Sans 3,12,-1,5,50,0,0,0,0,0"
general="Source Sans 3,12,-1,5,50,0,0,0,0,0"
'';
in
[
{
home.file.".config/qt5ct/qt5ct.conf".source = qt5ctConf;
home.file.".config/qt6ct/qt6ct.conf".source = qt5ctConf;
}
];
programs.yazi = { programs.yazi = {
settings.keymap.mgr.prepend_keymap = [ settings.keymap.mgr.prepend_keymap = [
@ -70,11 +97,34 @@ in
# enable the gnome shit # enable the gnome shit
services.gnome.gnome-keyring.enable = true; services.gnome.gnome-keyring.enable = true;
services.gnome.gnome-online-accounts.enable = true; services.gnome.gnome-online-accounts.enable = true;
services.gnome.core-apps.enable = true; environment.systemPackages = with pkgs; [
gnome-calendar
gnome-clocks
gnome-font-viewer
mate.engrampa
papirus-folders
kdePackages.gwenview
kdePackages.skanlite
kdePackages.okular
kdePackages.breeze-gtk
kdePackages.breeze.qt5
kdePackages.breeze
kdePackages.breeze-icons
nautilus # for xdg portal
];
services.gnome.gcr-ssh-agent.enable = mkForce false; services.gnome.gcr-ssh-agent.enable = mkForce false;
services.gnome.sushi.enable = true; # services.gnome.sushi.enable = true;
services.gnome.gnome-settings-daemon.enable = true; services.gnome.gnome-settings-daemon.enable = true;
services.gvfs.enable = true;
programs.thunar = {
enable = true;
plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
];
};
services.tumbler.enable = true; # thunar image preview
services.gvfs.enable = true; # thunar network device mount
xdg.terminal-exec = { xdg.terminal-exec = {
enable = true; enable = true;
@ -88,35 +138,28 @@ in
{ pkgs, ... }: { pkgs, ... }:
{ {
xyno.mpv.enable = true; xyno.mpv.enable = true;
# xdg.mimeApps = { # xdg.mimeApps = {
# enable = true; # enable = true;
# defaultApplications = { # defaultApplications = {
# "x-scheme-handler/mailto" = [ "aerc.desktop" ]; # "x-scheme-handler/mailto" = [ "aerc.desktop" ];
# "inode/directory" = [ "org.gnome.Nautilus.desktop" ]; # "inode/directory" = [ "org.gnome.Nautilus.desktop" ];
# "application/x-gnome-saved-search" = [ "org.gnome.Nautilus.desktop" ]; # "application/x-gnome-saved-search" = [ "org.gnome.Nautilus.desktop" ];
# "x-scheme-handler/http" = "userapp-Zen-D2P132.desktop"; # "x-scheme-handler/http" = "userapp-Zen-D2P132.desktop";
# "x-scheme-handler/https" = "userapp-Zen-D2P132.desktop"; # "x-scheme-handler/https" = "userapp-Zen-D2P132.desktop";
# "x-scheme-handler/chrome" = "userapp-Zen-D2P132.desktop"; # "x-scheme-handler/chrome" = "userapp-Zen-D2P132.desktop";
# "text/html" = "userapp-Zen-D2P132.desktop"; # "text/html" = "userapp-Zen-D2P132.desktop";
# "application/x-extension-htm" = "userapp-Zen-D2P132.desktop"; # "application/x-extension-htm" = "userapp-Zen-D2P132.desktop";
# "application/x-extension-html" = "userapp-Zen-D2P132.desktop"; # "application/x-extension-html" = "userapp-Zen-D2P132.desktop";
# "application/x-extension-shtml" = "userapp-Zen-D2P132.desktop"; # "application/x-extension-shtml" = "userapp-Zen-D2P132.desktop";
# "application/xhtml+xml" = "userapp-Zen-D2P132.desktop"; # "application/xhtml+xml" = "userapp-Zen-D2P132.desktop";
# "application/x-extension-xhtml" = "userapp-Zen-D2P132.desktop"; # "application/x-extension-xhtml" = "userapp-Zen-D2P132.desktop";
# "application/x-extension-xht" = "userapp-Zen-D2P132.desktop"; # "application/x-extension-xht" = "userapp-Zen-D2P132.desktop";
# "application/pdf" = "org.gnome.Evince.desktop"; # "application/pdf" = "org.gnome.Evince.desktop";
# }; # };
# }; # };
}; };
environment.systemPackages = with pkgs; [
kdePackages.breeze-gtk
kdePackages.breeze.qt5
kdePackages.breeze
kdePackages.breeze-icons
];
# fonts # fonts
fonts.fontconfig.defaultFonts = { fonts.fontconfig.defaultFonts = {
sansSerif = [ sansSerif = [

View file

@ -27,16 +27,16 @@ inputs: self: super: {
fido2-hid-bridge = super.callPackage ../packages/fido2-hid-bridge.nix {}; fido2-hid-bridge = super.callPackage ../packages/fido2-hid-bridge.nix {};
python-uhid = super.callPackage ../packages/uhid.nix {}; python-uhid = super.callPackage ../packages/uhid.nix {};
caddy-desec = super.callPackage ../packages/caddy-desec.nix {}; caddy-desec = super.callPackage ../packages/caddy-desec.nix {};
ibus-patched = super.unstable.ibus.overrideAttrs (old: {
# todo: remove on next supersonic release patches = old.patches ++ [
supersonic-wayland = super.supersonic-wayland.overrideAttrs (old: { # (builtins.head old.patches)
patches = (if old?patches then old.patches else []) ++ [ # (builtins.head (builtins.tail old.patches))
(self.fetchpatch2 { (self.fetchpatch2 {
url = "https://github.com/dweymouth/supersonic/commit/ee742cf34ef7225d345c16354d9c21d72a41bf4a.patch"; url = "https://github.com/ibus/ibus/commit/dde00b1b689037e70d79a703aa028f7c3de289e2.patch";
hash = "sha256-kSeEbzrfJ4Pe8JC4rIWlSmADOcjrCRBNWlcO8VfVnn4="; hash = "sha256-Q5XANWsN7f9Kcno8Icgn8wlXL489YlcrlUrqeA67nWU=";
}) })
]; ];
vendorHash = "sha256-Sh3PxRwb6ElSeWzdvIQ+nD9VVGlpUDwxG7nAoGWPTRQ=";
}); });
} }