diff --git a/flake-modules/colors.json b/flake-modules/colors.json index 61eecac..ea48ae1 100644 --- a/flake-modules/colors.json +++ b/flake-modules/colors.json @@ -1,13 +1,13 @@ { "base": { - "foreground": "#fefefe", - "background": "#020202" + "foreground": "#dcd5f5", + "background": "#100929" }, "to_alter": { - "accent": "#aaaaff", - "secondary": "#aaeeff", - "tertiary": "#aaffaa", - "special": "#aaffaa", - "weird": "#ffffaa" + "accent": "#765ad7", + "secondary": "#ce32ff", + "tertiary": "#879eaa", + "special": "#bad759", + "weird": "#d75991" } } \ No newline at end of file diff --git a/flake-modules/rice.nix b/flake-modules/rice.nix index 0503d59..12cfc31 100644 --- a/flake-modules/rice.nix +++ b/flake-modules/rice.nix @@ -26,7 +26,7 @@ pkgs: rec { fbcolor = (builtins.fromJSON (builtins.readFile ./colors.json)).base; fcolor = facolor // fbcolor; xcolor = with ccolor; with fcolor; { - background = "#000000"; + # background = "#000000"; # foreground = "#dddddd"; # accent = blue; # secondary = cyan; diff --git a/flake.lock b/flake.lock index e8ed36a..2ad837b 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ ] }, "locked": { - "lastModified": 1753216019, - "narHash": "sha256-zik7WISrR1ks2l6T1MZqZHb/OqroHdJnSnAehkE0kCk=", + "lastModified": 1755946532, + "narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "be166e11d86ba4186db93e10c54a141058bdce49", + "rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada", "type": "github" }, "original": { @@ -39,11 +39,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1755988415, - "narHash": "sha256-QveKdwB5ACKS1+qNqYsaZrai3nasidjsiKslnk0F6os=", + "lastModified": 1756320983, + "narHash": "sha256-huaJ1CvBsylibf55pjiFEpiKxYU235iAzwMhJ+iDSjw=", "owner": "9001", "repo": "copyparty", - "rev": "68503444c7d6f6f7fc6f5a41258cabf50568a9ab", + "rev": "f4f702c39dd2365f6ca43ed6b72a84c708fded8d", "type": "github" }, "original": { @@ -220,11 +220,11 @@ ] }, "locked": { - "lastModified": 1755928099, - "narHash": "sha256-OILVkfhRCm8u18IZ2DKR8gz8CVZM2ZcJmQBXmjFLIfk=", + "lastModified": 1756245065, + "narHash": "sha256-aAZNbGcWrVRZgWgkQbkabSGcDVRDMgON4BipMy69gvI=", "owner": "nix-community", "repo": "home-manager", - "rev": "4a44fb9f7555da362af9d499817084f4288a957f", + "rev": "54b2879ce622d44415e727905925e21b8f833a98", "type": "github" }, "original": { @@ -279,11 +279,11 @@ ] }, "locked": { - "lastModified": 1754305013, - "narHash": "sha256-u+M2f0Xf1lVHzIPQ7DsNCDkM1NYxykOSsRr4t3TbSM4=", + "lastModified": 1755678602, + "narHash": "sha256-uEC5O/NIUNs1zmc1aH1+G3GRACbODjk2iS0ET5hXtuk=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "4c1d63a0f22135db123fc789f174b89544c6ec2d", + "rev": "157cc52065a104fc3b8fa542ae648b992421d1c7", "type": "github" }, "original": { @@ -308,11 +308,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1756022257, - "narHash": "sha256-2ABxsC0wvS6aYQz97CBvrmxUOEXWFvKQfs4e05Rvt5o=", + "lastModified": 1756325904, + "narHash": "sha256-PRz3GE4ZBScWrHTVegpM4B2YLZplp1iPwmZ9AeYBbsg=", "ref": "refs/heads/main", - "rev": "ced38b1b0f46f9fbdf9d37644d27bdbd2a29af1d", - "revCount": 6391, + "rev": "378e130f1426648d8d734049800128f9882805bf", + "revCount": 6395, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -340,11 +340,11 @@ ] }, "locked": { - "lastModified": 1755183521, - "narHash": "sha256-wrP8TM2lb2x0+PyTc7Uc3yfVBeIlYW7+hFeG14N9Cr8=", + "lastModified": 1756325158, + "narHash": "sha256-aJ9jAYtZ64MWBpWPfH1q+t6U9b6kJWc2yK9Vrlj6fZY=", "owner": "hyprwm", "repo": "hyprland-plugins", - "rev": "c1ddebb423acc7c88653c04de5ddafee64dac89a", + "rev": "bf843fc6adf90d43a5dd7742e9df61d395ba780d", "type": "github" }, "original": { @@ -508,11 +508,11 @@ ] }, "locked": { - "lastModified": 1754481650, - "narHash": "sha256-6u6HdEFJh5gY6VfyMQbhP7zDdVcqOrCDTkbiHJmAtMI=", + "lastModified": 1756117388, + "narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "df6b8820c4a0835d83d0c7c7be86fbc555f1f7fd", + "rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0", "type": "github" }, "original": { @@ -533,11 +533,11 @@ ] }, "locked": { - "lastModified": 1751897909, - "narHash": "sha256-FnhBENxihITZldThvbO7883PdXC/2dzW4eiNvtoV5Ao=", + "lastModified": 1755184602, + "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "fcca0c61f988a9d092cbb33e906775014c61579d", + "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", "type": "github" }, "original": { @@ -607,11 +607,11 @@ }, "nixpkgs-latest": { "locked": { - "lastModified": 1756040103, - "narHash": "sha256-tyRpc3rv2YEWfDrE/Pq3ujpGERfs7JCwcwuAWH50gXk=", + "lastModified": 1756326156, + "narHash": "sha256-EvRCnKAE5oL9wOIT/LrA5+pJVpTvhH71OReJDTOZDyk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "09340442016bf3b9688e659d598ac8077a08eb42", + "rev": "636dea4f2cd65b8c558149a957423da47c1cbc95", "type": "github" }, "original": { @@ -639,11 +639,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1755615617, - "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", + "lastModified": 1756266583, + "narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "20075955deac2583bb12f07151c2df830ef346b4", + "rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2", "type": "github" }, "original": { @@ -654,11 +654,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1754725699, - "narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=", + "lastModified": 1756266583, + "narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054", + "rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2", "type": "github" }, "original": { @@ -702,11 +702,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1755922037, - "narHash": "sha256-wY1+2JPH0ZZC4BQefoZw/k+3+DowFyfOxv17CN/idKs=", + "lastModified": 1756217674, + "narHash": "sha256-TH1SfSP523QI7kcPiNtMAEuwZR3Jdz0MCDXPs7TS8uo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b1b3291469652d5a2edb0becc4ef0246fff97a7c", + "rev": "4e7667a90c167f7a81d906e5a75cba4ad8bee620", "type": "github" }, "original": { @@ -741,11 +741,11 @@ ] }, "locked": { - "lastModified": 1754416808, - "narHash": "sha256-c6yg0EQ9xVESx6HGDOCMcyRSjaTpNJP10ef+6fRcofA=", + "lastModified": 1755960406, + "narHash": "sha256-RF7j6C1TmSTK9tYWO6CdEMtg6XZaUKcvZwOCD2SICZs=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "9c52372878df6911f9afc1e2a1391f55e4dfc864", + "rev": "e891a93b193fcaf2fc8012d890dc7f0befe86ec2", "type": "github" }, "original": { @@ -932,11 +932,11 @@ ] }, "locked": { - "lastModified": 1753633878, - "narHash": "sha256-js2sLRtsOUA/aT10OCDaTjO80yplqwOIaLUqEe0nMx0=", + "lastModified": 1755354946, + "narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "371b96bd11ad2006ed4f21229dbd1be69bed3e8a", + "rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0", "type": "github" }, "original": { @@ -952,11 +952,11 @@ "rust-overlay": "rust-overlay_2" }, "locked": { - "lastModified": 1755961571, - "narHash": "sha256-PZ/5FT98cHeUBt7k3nnNmiYbuO6kf7vB1DA8ieAmYpw=", + "lastModified": 1756309929, + "narHash": "sha256-udly1zNvxR6UKFZSkbutSEZ9EihUd+pPCDBaseppB5s=", "owner": "sxyazi", "repo": "yazi", - "rev": "c27ef58116794de7f559bca74e60e6e13ae92051", + "rev": "dd7afaa64aa54fac5bd30404eb44ccd9d68f31c5", "type": "github" }, "original": { diff --git a/home-modules/bar/hyprpanel.nix b/home-modules/bar/hyprpanel.nix index 5bd527f..0b1c241 100644 --- a/home-modules/bar/hyprpanel.nix +++ b/home-modules/bar/hyprpanel.nix @@ -44,7 +44,7 @@ "*" = { "left" = [ "volume" - "battery" + (pkgs.lib.mkIf (hyper.host == "NxXPS") "battery") # "microphone" "cpu" "cputemp" diff --git a/home-modules/chatterino.nix b/home-modules/chatterino.nix index e0a8915..2faa000 100644 --- a/home-modules/chatterino.nix +++ b/home-modules/chatterino.nix @@ -52,7 +52,7 @@ in { packages = with pkgs; [ chatterino2 streamlink - mpv + # mpv ]; file = { ".local/share/chatterino/Settings/settings.json".text = with secrets.chatterino; /* json */ '' diff --git a/home-modules/firefox.nix b/home-modules/firefox.nix index 4b89bd2..ca0dd51 100644 --- a/home-modules/firefox.nix +++ b/home-modules/firefox.nix @@ -67,13 +67,13 @@ /* New tab page */ --newtab-background-color : ${background} !important; - --newtab-background-color-secondary : ${background} !important; + --newtab-background-color-secondary : ${secondary.dark} !important; --newtab-text-primary-color : ${foreground} !important; --newtab-text-secondary-color : ${secondary.base} !important; --newtab-search-icon-color : ${accent.base} !important; --tabpanel-background-color : transparent !important; - background : rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important; + background : linear-gradient(180deg,rgba(${rice.lib.hex-to-rgb-comma-string secondary.dark}, ${builtins.toString rice.transparency}) 0%, rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) 100%) !important; } .tabbrowser-tab[selected="true"] { color: ${background} !important; diff --git a/home-modules/hyprland.nix b/home-modules/hyprland.nix index d123118..05bf154 100644 --- a/home-modules/hyprland.nix +++ b/home-modules/hyprland.nix @@ -10,7 +10,7 @@ let second = { name = "desc:Sony SONY TV 0x01010101"; resolution = "1920x1080"; position = "0x0"; scale = "1.0"; }; }; north = { - main = { name = "desc:Iiyama North America PL3270Q na"; resolution = "2560x1440"; position = "1920x150"; scale = "1.0"; }; + main = { name = "desc:Iiyama North America PL3270Q na"; resolution = "2560x1440"; position = "1920x0"; scale = "1.0"; }; left = { name = "desc:Philips Consumer Electronics Company 273PLPH AU11423002132"; resolution = "1920x1080"; position = "0x0"; scale = "1.0"; }; # right = { name = "HDMI-A-2"; resolution = "1920x1080"; position = "4480x360"; scale = "1.0"; }; }; diff --git a/home-modules/mpv.nix b/home-modules/mpv.nix new file mode 100644 index 0000000..9e1b7e8 --- /dev/null +++ b/home-modules/mpv.nix @@ -0,0 +1,80 @@ +{ pkgs, ... }@all: with all; { + programs.mpv = { + enable = true; + package = pkgs.mpv; + config = { + # osc = false; # Disables the on-screen controller (seekbar, volume, etc.) + # osd-bar = false; # Disables the on-screen display progress bar + demuxer-max-back-bytes = 4294967296; # Sets the maximum number of bytes to buffer for seeking backwards + demuxer-max-bytes = 4294967296; # Sets the maximum number of bytes to buffer for seeking forwards + interpolation = true; # Enables frame interpolation for smoother playback + video-sync = "display-resample"; # Synchronizes video playback to the display's refresh rate + sub-visibility = true; # Hides subtitles by default + sub-auto = "fuzzy"; # Automatically loads subtitles if their filename is similar to the video file + sub-font = rice.font.base.name; + # sub-blur = 10; # this blurs the whole thing, text aswell + sub-color = rice.color.accent.bright; + sub-back-color = "${rice.color.background}${rice.lib.float-to-drune 0.8}"; # does not seem to work + # sub-border-size = 0; + sub-border-style = "opaque-box"; + background-color = "${rice.color.background}"; # transparency breaks blur on hyprland sometimes, so just rgb + alang = "en,eng,de,ger"; # Sets preferred audio languages in order + slang = "en,eng,de,ger"; # Sets preferred subtitle languages in order + vlang = "en,eng,de,ger"; # Sets preferred video languages in order + save-position-on-quit = true; # Saves the playback position when quitting + ignore-path-in-watch-later-config = true; # Ignores the path in the watch-later configuration + ytdl-format = "bestvideo[height<=?1080]+bestaudio/best"; # Sets the format for downloading YouTube videos + vo = pkgs.lib.mkIf hyper.nvidia.enable "gpu"; + hwdec = if hyper.nvidia.enable then "no" else "no"; # bugged + }; + scripts = with pkgs.mpvScripts; [ + mpris # use media keys + thumbfast # thumbnails on timeline hover + # uosc # custom ui + sponsorblock + ]; + bindings = { + "O" = ''no-osd cycle-values glsl-shaders "~~/shaders/invert.glsl" ""; show-text "Invert Shader"''; + # "tab" = ''script-binding uosc/toggle-ui''; + # "space" = ''cycle pause; script-binding uosc/flash-pause-indicator''; + # "right" = ''seek 5''; + # "left" = ''seek -5''; + # "shift+right" = ''seek 30; script-binding uosc/flash-timeline''; + # "shift+left" = ''seek -30; script-binding uosc/flash-timeline''; + # "m" = ''no-osd cycle mute; script-binding uosc/flash-volume''; + # "up" = ''no-osd add volume 10; script-binding uosc/flash-volume''; + # "down" = ''no-osd add volume -10; script-binding uosc/flash-volume''; + # "[" = ''no-osd add speed -0.25; script-binding uosc/flash-speed''; + # "]" = ''no-osd add speed 0.25; script-binding uosc/flash-speed''; + # "\\" = ''no-osd set speed 1; script-binding uosc/flash-speed''; + # ">" = ''script-binding uosc/next; script-message-to uosc flash-elements top_bar,timeline''; + # "<" = ''script-binding uosc/prev; script-message-to uosc flash-elements top_bar,timeline>''; + }; + scriptOpts = { + thumbfast = { + spawn_first = true; + network = true; + hwdec = true; + }; + uosc = { + timeline_size = 25; + timeline_persistency = "paused,audio"; + progress = "always"; + progress_size = 4; + progress_line_width = 4; + controls = "subtitles,audio,video,editions,stream-quality"; + top_bar = "never"; + refine = "text_width"; + }; + }; + }; + xdg.configFile."mpv/shaders/invert.glsl".text = /* glsl */ '' + //!HOOK LUMA + //!BIND HOOKED + vec4 hook() + { + float luma = LUMA_texOff(0).x; + return vec4(1.0 - luma); + } + ''; +} diff --git a/home-modules/opencode.nix b/home-modules/opencode.nix index 3a57c32..7865a61 100644 --- a/home-modules/opencode.nix +++ b/home-modules/opencode.nix @@ -11,8 +11,7 @@ theme = "matrix"; provider = { ollama = { - apiKey = "KEY"; - disabled = false; + name = "Ollama (local)"; npm = "@ai-sdk/openai-compatible"; options = { baseURL = "http://localhost:11434/v1"; diff --git a/home-modules/pkgs-list/programs.nix b/home-modules/pkgs-list/programs.nix index 4ac2595..c936a71 100644 --- a/home-modules/pkgs-list/programs.nix +++ b/home-modules/pkgs-list/programs.nix @@ -2,7 +2,6 @@ home.packages = with pkgs; [ chromium element-desktop - mpv qbittorrent unstable.spotify wl-clipboard diff --git a/home-modules/pkgs-list/shell.nix b/home-modules/pkgs-list/shell.nix index 90a8f6b..9c35172 100644 --- a/home-modules/pkgs-list/shell.nix +++ b/home-modules/pkgs-list/shell.nix @@ -20,7 +20,6 @@ lolcat lynx mediainfo - mpv neofetch pastel pdfgrep diff --git a/home-modules/programming/glsl.nix b/home-modules/programming/glsl.nix new file mode 100644 index 0000000..7f77d81 --- /dev/null +++ b/home-modules/programming/glsl.nix @@ -0,0 +1,8 @@ +{ pkgs, ... }@all: with all; +{ + home = { + packages = with pkgs; [ + glsl_analyzer + ]; + }; +} diff --git a/home-modules/yazi.nix b/home-modules/yazi.nix index 74af1fa..848f4b8 100644 --- a/home-modules/yazi.nix +++ b/home-modules/yazi.nix @@ -1,7 +1,9 @@ -{ pkgs, ... }@all: with all; -{ - home.packages = with pkgs; [ - unar +{ pkgs, ... }@all: with all; let + tfc = pkgs.latest.xdg-desktop-portal-termfilechooser; +in { + home.packages = [ + pkgs.unar + tfc ]; programs.yazi = { @@ -328,6 +330,12 @@ border_symbol = "│"; border_style = { fg = border; }; }; + tabs = { + active = { fg = accent.dark; bg = accent.base; }; + inactive = { fg = secondary.base; bg = secondary.dark; }; + # sep_inner = + # sep_outer = + }; status = { separator_open = " "; #""; separator_close = " "; #""; @@ -397,73 +405,23 @@ }; }; xdg = { - # # https://github.com/hunkyburrito/xdg-desktop-portal-termfilechooser/pull/44 - configFile = let - wrapper = pkgs.writeShellApplication { name = "yazi-wrapper.sh"; text = /*bash*/ '' - set -ex - - multiple="$1" - directory="$2" - save="$3" - path="$4" - out="$5" - - cmd="yazi" - termcmd="''${TERMCMD:-kitty --title 'termfilechooser'}" - - if [ "$save" = "1" ]; then - # save a file - set -- --chooser-file="$out" "$path" - elif [ "$directory" = "1" ]; then - # upload files from a directory - set -- --chooser-file="$out" --cwd-file="$out" "$path" - elif [ "$multiple" = "1" ]; then - # upload multiple files - set -- --chooser-file="$out" "$path" - else - # upload only 1 file - set -- --chooser-file="$out" "$path" - fi - - command="$termcmd $cmd" - for arg in "$@"; do - # escape double quotes - escaped=$(printf "%s" "$arg" | sed -E 's/[\"\(\)\{\}\|]//g') - # escape spaces - command="$command \"$escaped\"" - done - - sh -c "$command" - '';}; - in { - "xdg-desktop-portal-termfilechooser/config".text = '' + configFile."xdg-desktop-portal-termfilechooser/config" = { + force = true; + text = '' [filechooser] - cmd=${wrapper}/bin/yazi-wrapper.sh + cmd=${tfc}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh env=TERMCMD=ghostty --title="terminal-file-picker -e" default_dir=$HOME open_mode=suggested save_mode=last ''; - # "xdg-desktop-portal-termfilechooser/config".text = '' - # [filechooser] - # cmd=${pkgs.latest.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh - # env=TERMCMD=ghostty --title="terminal-file-picker -e" - # default_dir=$HOME - # open_mode=suggested - # save_mode=last - # ''; }; portal = { enable = true; - extraPortals = [ pkgs.latest.xdg-desktop-portal-termfilechooser ]; - config = { - common = { - "org.freedesktop.impl.portal.FileChooser" = "termfilechooser"; - }; - }; + xdgOpenUsePortal = true; + config.common."org.freedesktop.impl.portal.FileChooser" = "termfilechooser"; + extraPortals = [ tfc ]; }; }; - home.sessionVariables = { - GTK_USE_PORTAL = "1"; - }; + home.sessionVariables."GTK_USE_PORTAL" = "1"; } diff --git a/home-modules/zathura.nix b/home-modules/zathura.nix index 447f635..9cc780d 100644 --- a/home-modules/zathura.nix +++ b/home-modules/zathura.nix @@ -10,7 +10,7 @@ completion-fg = foreground; completion-highlight-bg = background; completion-highlight-fg = accent.base; - default-bg = "rgba(${f background},${t})"; + default-bg = "rgba(${f accent.dark},${t})"; default-fg = foreground; highlight-active-color = "rgba(${f accent.base},0.5)"; highlight-color = "rgba(${f secondary.base},0.5)"; diff --git a/home.nix b/home.nix index 68f96c1..194c3dc 100644 --- a/home.nix +++ b/home.nix @@ -28,6 +28,7 @@ ./home-modules/latex.nix ./home-modules/mako.nix # ./home-modules/matrix.nix + ./home-modules/mpv.nix ./home-modules/nh.nix ./home-modules/nixd.nix ./home-modules/nvidia.nix @@ -43,6 +44,7 @@ ./home-modules/pnx.nix ./home-modules/programming/c.nix ./home-modules/programming/gleam.nix + ./home-modules/programming/glsl.nix ./home-modules/programming/go.nix ./home-modules/programming/java.nix ./home-modules/programming/js.nix diff --git a/system-modules/ollama.nix b/system-modules/ollama.nix index 9fe38d3..446446a 100644 --- a/system-modules/ollama.nix +++ b/system-modules/ollama.nix @@ -4,7 +4,7 @@ package = if hyper.nvidia.enable then pkgs.ollama-cuda else pkgs.ollama; enable = true; acceleration = lib.mkIf hyper.nvidia.enable "cuda"; - host = if hyper.host == "NxACE" then "0.0.0.0" else "127.0.0.1"; + host = "0.0.0.0"; port = 11434; environmentVariables = { OLLAMA_ORIGINS = "*";