diff options
| author | aristote <quentin.aristote@irif.fr> | 2025-07-29 15:25:11 +0200 |
|---|---|---|
| committer | aristote <quentin.aristote@irif.fr> | 2025-07-29 15:25:11 +0200 |
| commit | fc019d789523ce5f89436b8dbc458cf3b79abf43 (patch) | |
| tree | ec56fd1b1ed9fc75096c0b09db48a152975e4d53 /modules/home-manager/personal/programs | |
| parent | a3d19bc509d9f39fb41256cd55d2bd7706de202f (diff) | |
reformat everything with nixfmt
Diffstat (limited to 'modules/home-manager/personal/programs')
10 files changed, 388 insertions, 256 deletions
diff --git a/modules/home-manager/personal/programs/alacritty.nix b/modules/home-manager/personal/programs/alacritty.nix index 94193e8..201fe29 100644 --- a/modules/home-manager/personal/programs/alacritty.nix +++ b/modules/home-manager/personal/programs/alacritty.nix @@ -2,20 +2,19 @@ { programs.alacritty.settings = { - window = { - padding = { - x = 10; - y = 10; - }; - dimensions = { - lines = 75; - columns = 100; - }; + window = { + padding = { + x = 10; + y = 10; }; + dimensions = { + lines = 75; + columns = 100; + }; + }; - font = lib.mkForce { size = 8.0; }; + font = lib.mkForce { size = 8.0; }; }; xsession.windowManager.i3.config.terminal = lib.mkIf config.programs.alacritty.enable "alacritty"; } - diff --git a/modules/home-manager/personal/programs/devenv.nix b/modules/home-manager/personal/programs/devenv.nix index b41d0cb..dbe5aab 100644 --- a/modules/home-manager/personal/programs/devenv.nix +++ b/modules/home-manager/personal/programs/devenv.nix @@ -3,10 +3,12 @@ lib, pkgs, ... -}: let +}: +let cfg = config.personal.programs.devenv; - importedDevenv = pkgs ? devenv; # -in { + importedDevenv = pkgs ? devenv; +in +{ options.personal.programs.devenv.enable = lib.mkEnableOption "devenv"; config = lib.mkIf cfg.enable { diff --git a/modules/home-manager/personal/programs/direnv.nix b/modules/home-manager/personal/programs/direnv.nix index fe1662d..1cb4ea9 100644 --- a/modules/home-manager/personal/programs/direnv.nix +++ b/modules/home-manager/personal/programs/direnv.nix @@ -3,17 +3,18 @@ lib, pkgs, ... -}: let +}: +let cfg = config.programs.direnv; -in { +in +{ programs.direnv.nix-direnv.enable = true; - systemd.user = - lib.mkIf cfg.enable - (pkgs.personal.lib.homeManager.serviceWithTimer "direnv-clean-update" { + systemd.user = lib.mkIf cfg.enable ( + pkgs.personal.lib.homeManager.serviceWithTimer "direnv-clean-update" { Unit = { Description = "Remove old virtual environments and update the current ones"; - After = ["network-online.target"]; + After = [ "network-online.target" ]; }; Service = { Type = "oneshot"; @@ -30,6 +31,9 @@ in { Persistent = true; OnCalendar = "daily"; }; - Install = {WantedBy = ["default.target "];}; - }); + Install = { + WantedBy = [ "default.target " ]; + }; + } + ); } diff --git a/modules/home-manager/personal/programs/emacs.nix b/modules/home-manager/personal/programs/emacs.nix index da0c07f..da30cd2 100644 --- a/modules/home-manager/personal/programs/emacs.nix +++ b/modules/home-manager/personal/programs/emacs.nix @@ -1,12 +1,21 @@ -{ config, lib, pkgs, ... }: +{ + config, + lib, + pkgs, + ... +}: let cfg = config.programs.emacs; - spacemacs-update-script = pkgs.callPackage ({ emacs, git }: + spacemacs-update-script = pkgs.callPackage ( + { emacs, git }: pkgs.writeShellApplication { name = "spacemacs-update"; - runtimeInputs = [ emacs git ]; + runtimeInputs = [ + emacs + git + ]; text = '' git checkout develop @@ -18,40 +27,57 @@ let (configuration-layer/update-packages "no-confirmation") (spacemacs/kill-emacs))' ''; - }) { emacs = cfg.package; }; -in { + } + ) { emacs = cfg.package; }; +in +{ config = lib.mkIf cfg.enable { services.emacs = { enable = lib.mkDefault true; client.enable = lib.mkDefault true; startWithUserSession = lib.mkDefault true; - package = let emacs = config.programs.emacs.finalPackage; in - pkgs.runCommand "emacsWrapped" { - nativeBuildInputs = with pkgs; [ makeWrapper ]; - } '' - mkdir "$out" - ln -s ${emacs}/share "$out" - for binary in ${emacs}/bin/* - do - makeWrapper "$binary" "$out"/bin/$(basename "$binary")\ - --prefix PATH : ${lib.makeBinPath (with pkgs; [ gnutar gcc ])} - done + package = + let + emacs = config.programs.emacs.finalPackage; + in + pkgs.runCommand "emacsWrapped" + { + nativeBuildInputs = with pkgs; [ makeWrapper ]; + } + '' + mkdir "$out" + ln -s ${emacs}/share "$out" + for binary in ${emacs}/bin/* + do + makeWrapper "$binary" "$out"/bin/$(basename "$binary")\ + --prefix PATH : ${ + lib.makeBinPath ( + with pkgs; + [ + gnutar + gcc + ] + ) + } + done ''; }; home.sessionVariables.EDITOR = "emacsclient --tty"; home.shellAliases.editor = "emacsclient --create-frame"; # spacemacs dotfile - home.file.".spacemacs.d/init.el".source = - lib.mkDefault config.personal.home.dotfiles.spacemacs; + home.file.".spacemacs.d/init.el".source = lib.mkDefault config.personal.home.dotfiles.spacemacs; # service to update spacemacs - systemd.user = - (pkgs.personal.lib.homeManager.serviceWithTimer "spacemacs-update" { + systemd.user = ( + pkgs.personal.lib.homeManager.serviceWithTimer "spacemacs-update" { Unit = { Description = "Update Spacemacs by pulling the develop branch"; - After = [ "network-online.target" "emacs.service" ]; + After = [ + "network-online.target" + "emacs.service" + ]; }; Service = { Type = "oneshot"; @@ -62,7 +88,10 @@ in { Persistent = true; OnCalendar = "daily"; }; - Install = { WantedBy = [ "default.target" ]; }; - }); + Install = { + WantedBy = [ "default.target" ]; + }; + } + ); }; } diff --git a/modules/home-manager/personal/programs/firefox/default.nix b/modules/home-manager/personal/programs/firefox/default.nix index d103c3d..3f1963d 100644 --- a/modules/home-manager/personal/programs/firefox/default.nix +++ b/modules/home-manager/personal/programs/firefox/default.nix @@ -4,178 +4,221 @@ pkgs, ... }: -with lib; let +with lib; +let cfg = config.personal.firefox; userjs = pkgs.callPackage ./userjs.nix { inherit (pkgs.personal.static.userjs) arkenfox; inherit (pkgs.lib.personal) toUserJS; }; - engines = import ./engines.nix {inherit lib pkgs;}; + engines = import ./engines.nix { inherit lib pkgs; }; webappsWithIds = - (builtins.foldl' ({ - counter, - value, - }: {name, ...} @ next: { - counter = counter + 1; - value = - value - ++ [ - (next + (builtins.foldl' + ( + { + counter, + value, + }: + { name, ... }@next: + { + counter = counter + 1; + value = value ++ [ + ( + next // { id = counter; profileName = lib.toLower name; - }) + } + ) ]; - }) { + } + ) + { counter = 0; - value = []; + value = [ ]; } - cfg.webapps) - .value; -in { + cfg.webapps + ).value; +in +{ options.personal.firefox = { webapps = lib.mkOption { - type = with lib.types; + type = + with lib.types; listOf (submodule { - options = let - mkTypedOption = type: lib.mkOption {inherit type;}; - in { - name = mkTypedOption str; - genericName = mkTypedOption str // {default = "";}; - url = mkTypedOption str; - comment = mkTypedOption str // {default = "";}; - extraUserJS = mkTypedOption lines // {default = "";}; - categories = mkTypedOption (listOf str) // {default = [];}; - icon = mkTypedOption path; - }; + options = + let + mkTypedOption = type: lib.mkOption { inherit type; }; + in + { + name = mkTypedOption str; + genericName = mkTypedOption str // { + default = ""; + }; + url = mkTypedOption str; + comment = mkTypedOption str // { + default = ""; + }; + extraUserJS = mkTypedOption lines // { + default = ""; + }; + categories = mkTypedOption (listOf str) // { + default = [ ]; + }; + icon = mkTypedOption path; + }; }); - default = []; + default = [ ]; }; }; config = lib.mkMerge [ { programs.firefox.profiles = - builtins.foldl' (prev: { - id, - profileName, - extraUserJS, - ... - }: - prev - // { - "${profileName}" = { - id = id + 2; + builtins.foldl' + ( + prev: + { + id, + profileName, + extraUserJS, + ... + }: + prev + // { + "${profileName}" = { + id = id + 2; + extensions.packages = with pkgs.personal.firefoxAddons; [ + clearurls + neat-url + redirector + smart-referer + ublock-origin + unpaywall + url-in-title + ]; + search = { + force = true; + engines = with engines; disableDefault // { inherit Searx; }; + default = "Searx"; + privateDefault = "Searx"; + }; + extraConfig = userjs.streaming + extraUserJS; + }; + } + ) + { + default = { + id = 0; # isDefault = true + extensions.packages = with pkgs.personal.firefoxAddons; [ + canvasblocker clearurls + darkreader neat-url redirector smart-referer + temporary-containers + tree-style-tab ublock-origin unpaywall url-in-title ]; search = { - force = true; - engines = with engines; disableDefault // {inherit Searx;}; + force = lib.mkDefault true; + engines = + with engines; + disableDefault + // { + inherit Searx; + } + // lib.optionalAttrs config.personal.identities.personal personal + // lib.optionalAttrs config.personal.identities.work work + // lib.optionalAttrs config.personal.profiles.dev dev; default = "Searx"; - privateDefault = "Searx"; + order = [ + "Searx" + "Wikipedia" + ]; }; - extraConfig = userjs.streaming + extraUserJS; + extraConfig = userjs.default; + userChrome = ./userchrome/treestyletabs-outer.css; }; - }) { - default = { - id = 0; # isDefault = true - extensions.packages = with pkgs.personal.firefoxAddons; [ - canvasblocker - clearurls - darkreader - neat-url - redirector - smart-referer - temporary-containers - tree-style-tab - ublock-origin - unpaywall - url-in-title - ]; - search = { - force = lib.mkDefault true; - engines = with engines; - disableDefault - // { - inherit Searx; - } - // lib.optionalAttrs config.personal.identities.personal - personal - // lib.optionalAttrs config.personal.identities.work work - // lib.optionalAttrs config.personal.profiles.dev dev; - default = "Searx"; - order = ["Searx" "Wikipedia"]; - }; - extraConfig = userjs.default; - userChrome = ./userchrome/treestyletabs-outer.css; - }; - - videoconferencing = { - id = 1; - extensions.packages = with pkgs.personal.firefoxAddons; [ - clearurls - darkreader - neat-url - redirector - smart-referer - multi-account-containers - tree-style-tab - ublock-origin - unpaywall - url-in-title - ]; - search = { - force = true; - engines = with engines; disableDefault // {inherit Searx;}; - default = "Searx"; + videoconferencing = { + id = 1; + extensions.packages = with pkgs.personal.firefoxAddons; [ + clearurls + darkreader + neat-url + redirector + smart-referer + multi-account-containers + tree-style-tab + ublock-origin + unpaywall + url-in-title + ]; + search = { + force = true; + engines = with engines; disableDefault // { inherit Searx; }; + default = "Searx"; + }; + extraConfig = userjs.videoconferencing; + userChrome = ./userchrome/treestyletabs-outer.css; }; - extraConfig = userjs.videoconferencing; - userChrome = ./userchrome/treestyletabs-outer.css; - }; - } - webappsWithIds; + } + webappsWithIds; } (lib.mkIf config.programs.firefox.enable { - xdg.desktopEntries = let - firefoxProfilesDir = "${config.home.homeDirectory}/.mozilla/firefox"; - firefoxInProfile = profile: '' - ${config.programs.firefox.package}/bin/firefox --profile "${firefoxProfilesDir}/${profile}"''; - in - builtins.foldl' (prev: { - name, - profileName, - url, - genericName, - icon, - comment, - categories, - ... - }: - prev - // { - "${profileName}" = { - inherit name genericName icon comment categories; - exec = "${firefoxInProfile profileName} ${url}"; + xdg.desktopEntries = + let + firefoxProfilesDir = "${config.home.homeDirectory}/.mozilla/firefox"; + firefoxInProfile = + profile: + ''${config.programs.firefox.package}/bin/firefox --profile "${firefoxProfilesDir}/${profile}"''; + in + builtins.foldl' + ( + prev: + { + name, + profileName, + url, + genericName, + icon, + comment, + categories, + ... + }: + prev + // { + "${profileName}" = { + inherit + name + genericName + icon + comment + categories + ; + exec = "${firefoxInProfile profileName} ${url}"; + }; + } + ) + { + videoconferences = { + name = "Video Conferences"; + genericName = "Video conference"; + comment = "Use video conferencing software in a browser."; + exec = "${firefoxInProfile "videoconferencing"}"; + categories = [ + "Network" + "VideoConference" + ]; }; - }) { - videoconferences = { - name = "Video Conferences"; - genericName = "Video conference"; - comment = "Use video conferencing software in a browser."; - exec = "${firefoxInProfile "videoconferencing"}"; - categories = ["Network" "VideoConference"]; - }; - } - webappsWithIds; + } + webappsWithIds; home.shellAliases.fftmp = "firefox --profile $(mktemp -d)"; home.sessionVariables.BROWSER = "firefox"; diff --git a/modules/home-manager/personal/programs/firefox/engines.nix b/modules/home-manager/personal/programs/firefox/engines.nix index cc6a318..ddd5f3b 100644 --- a/modules/home-manager/personal/programs/firefox/engines.nix +++ b/modules/home-manager/personal/programs/firefox/engines.nix @@ -1,44 +1,67 @@ { lib, pkgs, -}: let +}: +let everyday = 24 * 60 * 60 * 1000; searchTerms = "{searchTerms}"; nixosIcon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; self = { - disable = engines: lib.genAttrs engines (_: {metaData.hidden = true;}); - disableDefault = self.disable ["google" "Amazon.fr" "bing"]; + disable = + engines: + lib.genAttrs engines (_: { + metaData.hidden = true; + }); + disableDefault = self.disable [ + "google" + "Amazon.fr" + "bing" + ]; nix = { - inherit (self) "Home Manager Options" "NixOS Options" "NixOS Wiki" "Nix Packages"; + inherit (self) + "Home Manager Options" + "NixOS Options" + "NixOS Wiki" + "Nix Packages" + ; }; - dev = self.nix // {inherit (self) AlternativeTo Phind;}; - personal = {inherit (self) Emojipedia;}; - work = {inherit (self) nLab;}; - all = self.dev // self.personal // self.work // {inherit (self) Searx;}; + dev = self.nix // { + inherit (self) AlternativeTo Phind; + }; + personal = { inherit (self) Emojipedia; }; + work = { inherit (self) nLab; }; + all = self.dev // self.personal // self.work // { inherit (self) Searx; }; Emojipedia = { urls = [ { template = "https://emojipedia.org/search/"; - params = [(lib.nameValuePair "q" searchTerms)]; + params = [ (lib.nameValuePair "q" searchTerms) ]; } ]; icon = "https://emojipedia.org/static/img/favicons/favicon-16x16.png"; updateInterval = everyday; - definedAliases = ["@emojipedia" "@emoji" "@em"]; + definedAliases = [ + "@emojipedia" + "@emoji" + "@em" + ]; }; AlternativeTo = { urls = [ { template = "https://alternativeto.net/browse/search/"; - params = [(lib.nameValuePair "q" searchTerms)]; + params = [ (lib.nameValuePair "q" searchTerms) ]; } ]; icon = "https://alternativeto.net/static/icons/a2/favicon-16x16.png"; updateInterval = everyday; - definedAliases = ["@alternativeto" "@a2"]; + definedAliases = [ + "@alternativeto" + "@a2" + ]; }; "Home Manager Options" = { @@ -48,7 +71,10 @@ } ]; icon = nixosIcon; - definedAliases = ["@homemanager" "@hm"]; + definedAliases = [ + "@homemanager" + "@hm" + ]; }; "NixOS Options" = { @@ -62,18 +88,24 @@ } ]; icon = nixosIcon; - definedAliases = ["@nixos" "@no"]; + definedAliases = [ + "@nixos" + "@no" + ]; }; "NixOS Wiki" = { urls = [ { template = "https://wiki.nixos.org/w/index.php"; - params = [(lib.nameValuePair "search" searchTerms)]; + params = [ (lib.nameValuePair "search" searchTerms) ]; } ]; icon = nixosIcon; - definedAliases = ["@nixoswiki" "@nw"]; + definedAliases = [ + "@nixoswiki" + "@nw" + ]; }; "Nix Packages" = { @@ -87,26 +119,32 @@ } ]; icon = nixosIcon; - definedAliases = ["@nixpkgs" "@np"]; + definedAliases = [ + "@nixpkgs" + "@np" + ]; }; nLab = { urls = [ { template = "https://ncatlab.org/nlab/search"; - params = [(lib.nameValuePair "query" searchTerms)]; + params = [ (lib.nameValuePair "query" searchTerms) ]; } ]; icon = "https://ncatlab.org/favicon.ico"; updateInterval = everyday; - definedAliases = ["@ncatlab" "@nlab"]; + definedAliases = [ + "@ncatlab" + "@nlab" + ]; }; Searx = { urls = [ { template = "https://searx.aristote.fr/search"; - params = [(lib.nameValuePair "q" searchTerms)]; + params = [ (lib.nameValuePair "q" searchTerms) ]; } ]; icon = "https://searx.aristote.fr/static/themes/simple/img/favicon.svg"; @@ -117,13 +155,16 @@ urls = [ { template = "https://phind.com/search"; - params = [(lib.nameValuePair "q" searchTerms)]; + params = [ (lib.nameValuePair "q" searchTerms) ]; } ]; icon = "https://www.phind.com/images/favicon.png"; updateInterval = everyday; - definedAliases = ["@phind" "@ph"]; + definedAliases = [ + "@phind" + "@ph" + ]; }; }; in - self +self diff --git a/modules/home-manager/personal/programs/firefox/userjs.nix b/modules/home-manager/personal/programs/firefox/userjs.nix index 8c17fa6..3f2b6bd 100644 --- a/modules/home-manager/personal/programs/firefox/userjs.nix +++ b/modules/home-manager/personal/programs/firefox/userjs.nix @@ -1,7 +1,8 @@ { arkenfox, toUserJS, -}: let +}: +let self = { arkenfox = builtins.readFile "${arkenfox}"; default = @@ -14,8 +15,8 @@ "dom.allow_cut_copy" = true; # 2404 "dom.battery.enabled" = false; # 2502 "permissions.default.xr" = 2; # 2521 - "browser.search.separatePrivateDefault" = false; #0830 - "browser.search.separatePrivateDefault.ui.enabled" = false; #0830 + "browser.search.separatePrivateDefault" = false; # 0830 + "browser.search.separatePrivateDefault.ui.enabled" = false; # 0830 # Personal ## Warnings @@ -57,12 +58,10 @@ "media.peerconnection.enabled" = true; "media.peerconnection.ice.no_host" = false; # may or may not be required "webgl.min_capability_mode" = true; - "media.autoplay.blocking_policy" = - 0; # optional (otherwise add site exceptions) - "javascript.options.wasm" = - true; # optional (some platforms may require this) + "media.autoplay.blocking_policy" = 0; # optional (otherwise add site exceptions) + "javascript.options.wasm" = true; # optional (some platforms may require this) "dom.webaudio.enabled" = true; }; }; in - self +self diff --git a/modules/home-manager/personal/programs/git.nix b/modules/home-manager/personal/programs/git.nix index 56078a8..488295e 100644 --- a/modules/home-manager/personal/programs/git.nix +++ b/modules/home-manager/personal/programs/git.nix @@ -3,19 +3,23 @@ lib, pkgs, ... -} @ extraArgs: let - primaryEmail = let - primaryEmailList = - builtins.filter (account: account.primary) - (lib.attrValues config.accounts.email.accounts); - in - if primaryEmailList == [] - then { - userName = lib.mkDefault "Quentin Aristote"; - address = lib.mkDefault "quentin@aristote.fr"; - } - else builtins.head primaryEmailList; -in { +}@extraArgs: +let + primaryEmail = + let + primaryEmailList = builtins.filter (account: account.primary) ( + lib.attrValues config.accounts.email.accounts + ); + in + if primaryEmailList == [ ] then + { + userName = lib.mkDefault "Quentin Aristote"; + address = lib.mkDefault "quentin@aristote.fr"; + } + else + builtins.head primaryEmailList; +in +{ programs.git = { userName = primaryEmail.userName; userEmail = primaryEmail.address; @@ -23,30 +27,35 @@ in { inherit (primaryEmail.gpg) key signByDefault; }; - ignores = - [ - (builtins.readFile - (pkgs.personal.static.gitignore.override {templates = ["Emacs" "Linux"];})) - ] - ++ [ - # Personal rules - '' - # direnv - .direnv - .envrc + ignores = [ + (builtins.readFile ( + pkgs.personal.static.gitignore.override { + templates = [ + "Emacs" + "Linux" + ]; + } + )) + ] + ++ [ + # Personal rules + '' + # direnv + .direnv + .envrc - # devenv - .devenv.flake.nix - .devenv/ - devenv.local.nix + # devenv + .devenv.flake.nix + .devenv/ + devenv.local.nix - # Nix - shell.nix - .nix-gc-roots - .tmp - result - '' - ]; + # Nix + shell.nix + .nix-gc-roots + .tmp + result + '' + ]; extraConfig = { safe.directory = lib.mkIf (extraArgs ? osConfig) ( @@ -55,7 +64,7 @@ in { flakeIsValid = flake != null && lib.hasPrefix "git+file://" flake; flakePath = lib.removePrefix "git+file://" flake; in - lib.optional flakeIsValid flakePath + lib.optional flakeIsValid flakePath ); init.defaultBranch = "master"; pull.rebase = true; diff --git a/modules/home-manager/personal/programs/rofi.nix b/modules/home-manager/personal/programs/rofi.nix index a3fdad3..10c284c 100644 --- a/modules/home-manager/personal/programs/rofi.nix +++ b/modules/home-manager/personal/programs/rofi.nix @@ -3,19 +3,23 @@ lib, pkgs, ... -}: { +}: +{ programs.rofi = { cycle = lib.mkDefault true; - theme = - lib.mkIf (config.lib ? stylix) - ( - lib.mkForce - (config.lib.stylix.colors { + theme = lib.mkIf (config.lib ? stylix) ( + lib.mkForce ( + config.lib.stylix.colors { template = builtins.readFile config.personal.home.dotfiles.rofi; extension = ".rasi"; - }) - ); - plugins = with pkgs; [rofi-top rofi-calc rofi-emoji]; + } + ) + ); + plugins = with pkgs; [ + rofi-top + rofi-calc + rofi-emoji + ]; }; xdg.dataFile."rofi/themes/custom.rasi" = lib.mkForce { source = config.programs.rofi.theme; diff --git a/modules/home-manager/personal/programs/thunderbird.nix b/modules/home-manager/personal/programs/thunderbird.nix index c904dd5..d68a5df 100644 --- a/modules/home-manager/personal/programs/thunderbird.nix +++ b/modules/home-manager/personal/programs/thunderbird.nix @@ -3,7 +3,8 @@ lib, pkgs, ... -}: let +}: +let configDefault = builtins.readFile "${pkgs.personal.static.userjs.thunderbird}" + pkgs.lib.personal.toUserJS { @@ -37,7 +38,8 @@ ## Spam "mail.spam.manualMark" = true; # move manually marked-as-junk to junk folder }; -in { +in +{ config = lib.mkMerge [ { programs.thunderbird = { @@ -50,8 +52,8 @@ in { (lib.mkIf config.programs.thunderbird.enable { home.file.".thunderbird/default/user.js".text = configDefault; xdg.mimeApps.defaultApplications = { - "x-scheme-handler/mailto" = ["thunderbird.desktop"]; - "application/x-xpinstall" = ["thunderbird.desktop"]; + "x-scheme-handler/mailto" = [ "thunderbird.desktop" ]; + "application/x-xpinstall" = [ "thunderbird.desktop" ]; }; }) ]; |
