Repository: abhi-kr-2100/Lingetic
Pull request #68: Start a new Python project using UV for scripts
Author: login: abhi-kr-2100
Created: 2025-03-01T09:47:47Z | Merged: 2025-03-01T13:43:44Z

Scripts will contain Python scripts to scrape
language data to help create language learning
courses for Lingetic.

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced a script that displays a greeting message when executed.
  - Added project configuration detailing version information and required dependencies.
  - Set up an environment file to ensure compatibility with Python 3.12.
  - Added a new file to specify the Python version required for the project.

- **Documentation**
  - Provided an overview describing a collection of scripts for language learning courses.

- **Chores**
  - Updated the shell environment setup to include an additional utility with version output.
  - Expanded the ignored files list to include compiled Python files.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/.gitignore b/.gitignore
index 524f0963..f0994bf7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,6 @@
 # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
 hs_err_pid*
 replay_pid*
+
+# Python build files
+*.pyc
diff --git a/scripts/.python-version b/scripts/.python-version
new file mode 100644
index 00000000..e4fba218
--- /dev/null
+++ b/scripts/.python-version
@@ -0,0 +1 @@
+3.12
diff --git a/scripts/README.md b/scripts/README.md
new file mode 100644
index 00000000..0fb7f7ed
--- /dev/null
+++ b/scripts/README.md
@@ -0,0 +1,3 @@
+# Lingetic Scripts
+
+A collection of scripts to create Lingetic language learning courses.
diff --git a/scripts/main.py b/scripts/main.py
new file mode 100644
index 00000000..fed2c4a9
--- /dev/null
+++ b/scripts/main.py
@@ -0,0 +1,9 @@
+#!/usr/bin/env python
+
+
+def main():
+    print("Hello, world!")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/scripts/pyproject.toml b/scripts/pyproject.toml
new file mode 100644
index 00000000..dbc3818d
--- /dev/null
+++ b/scripts/pyproject.toml
@@ -0,0 +1,12 @@
+[project]
+name = "scripts"
+version = "0.1.0"
+description = "A collection of scripts to create Lingetic language learning courses"
+readme = "README.md"
+requires-python = ">=3.12"
+dependencies = [
+    "ruff>=0.9.9",
+]
+
+[tool.ruff]
+line-length = 80
diff --git a/scripts/uv.lock b/scripts/uv.lock
new file mode 100644
index 00000000..ddc13682
--- /dev/null
+++ b/scripts/uv.lock
@@ -0,0 +1,39 @@
+version = 1
+revision = 1
+requires-python = ">=3.12"
+
+[[package]]
+name = "ruff"
+version = "0.9.9"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6f/c3/418441a8170e8d53d05c0b9dad69760dbc7b8a12c10dbe6db1e1205d2377/ruff-0.9.9.tar.gz", hash = "sha256:0062ed13f22173e85f8f7056f9a24016e692efeea8704d1a5e8011b8aa850933", size = 3717448 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/bc/c3/2c4afa9ba467555d074b146d9aed0633a56ccdb900839fb008295d037b89/ruff-0.9.9-py3-none-linux_armv6l.whl", hash = "sha256:628abb5ea10345e53dff55b167595a159d3e174d6720bf19761f5e467e68d367", size = 10027252 },
+    { url = "https://files.pythonhosted.org/packages/33/d1/439e58487cf9eac26378332e25e7d5ade4b800ce1eec7dc2cfc9b0d7ca96/ruff-0.9.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b6cd1428e834b35d7493354723543b28cc11dc14d1ce19b685f6e68e07c05ec7", size = 10840721 },
+    { url = "https://files.pythonhosted.org/packages/50/44/fead822c38281ba0122f1b76b460488a175a9bd48b130650a6fb6dbcbcf9/ruff-0.9.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5ee162652869120ad260670706f3cd36cd3f32b0c651f02b6da142652c54941d", size = 10161439 },
+    { url = "https://files.pythonhosted.org/packages/11/ae/d404a2ab8e61ddf6342e09cc6b7f7846cce6b243e45c2007dbe0ca928a5d/ruff-0.9.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3aa0f6b75082c9be1ec5a1db78c6d4b02e2375c3068438241dc19c7c306cc61a", size = 10336264 },
+    { url = "https://files.pythonhosted.org/packages/6a/4e/7c268aa7d84cd709fb6f046b8972313142cffb40dfff1d2515c5e6288d54/ruff-0.9.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:584cc66e89fb5f80f84b05133dd677a17cdd86901d6479712c96597a3f28e7fe", size = 9908774 },
+    { url = "https://files.pythonhosted.org/packages/cc/26/c618a878367ef1b76270fd027ca93692657d3f6122b84ba48911ef5f2edc/ruff-0.9.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abf3369325761a35aba75cd5c55ba1b5eb17d772f12ab168fbfac54be85cf18c", size = 11428127 },
+    { url = "https://files.pythonhosted.org/packages/d7/9a/c5588a93d9bfed29f565baf193fe802fa676a0c837938137ea6cf0576d8c/ruff-0.9.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:3403a53a32a90ce929aa2f758542aca9234befa133e29f4933dcef28a24317be", size = 12133187 },
+    { url = "https://files.pythonhosted.org/packages/3e/ff/e7980a7704a60905ed7e156a8d73f604c846d9bd87deda9cabfa6cba073a/ruff-0.9.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:18454e7fa4e4d72cffe28a37cf6a73cb2594f81ec9f4eca31a0aaa9ccdfb1590", size = 11602937 },
+    { url = "https://files.pythonhosted.org/packages/24/78/3690444ad9e3cab5c11abe56554c35f005b51d1d118b429765249095269f/ruff-0.9.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fadfe2c88724c9617339f62319ed40dcdadadf2888d5afb88bf3adee7b35bfb", size = 13771698 },
+    { url = "https://files.pythonhosted.org/packages/6e/bf/e477c2faf86abe3988e0b5fd22a7f3520e820b2ee335131aca2e16120038/ruff-0.9.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6df104d08c442a1aabcfd254279b8cc1e2cbf41a605aa3e26610ba1ec4acf0b0", size = 11249026 },
+    { url = "https://files.pythonhosted.org/packages/f7/82/cdaffd59e5a8cb5b14c408c73d7a555a577cf6645faaf83e52fe99521715/ruff-0.9.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d7c62939daf5b2a15af48abbd23bea1efdd38c312d6e7c4cedf5a24e03207e17", size = 10220432 },
+    { url = "https://files.pythonhosted.org/packages/fe/a4/2507d0026225efa5d4412b6e294dfe54725a78652a5c7e29e6bd0fc492f3/ruff-0.9.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9494ba82a37a4b81b6a798076e4a3251c13243fc37967e998efe4cce58c8a8d1", size = 9874602 },
+    { url = "https://files.pythonhosted.org/packages/d5/be/f3aab1813846b476c4bcffe052d232244979c3cd99d751c17afb530ca8e4/ruff-0.9.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4efd7a96ed6d36ef011ae798bf794c5501a514be369296c672dab7921087fa57", size = 10851212 },
+    { url = "https://files.pythonhosted.org/packages/8b/45/8e5fd559bea0d2f57c4e12bf197a2fade2fac465aa518284f157dfbca92b/ruff-0.9.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ab90a7944c5a1296f3ecb08d1cbf8c2da34c7e68114b1271a431a3ad30cb660e", size = 11327490 },
+    { url = "https://files.pythonhosted.org/packages/42/55/e6c90f13880aeef327746052907e7e930681f26a164fe130ddac28b08269/ruff-0.9.9-py3-none-win32.whl", hash = "sha256:6b4c376d929c25ecd6d87e182a230fa4377b8e5125a4ff52d506ee8c087153c1", size = 10227912 },
+    { url = "https://files.pythonhosted.org/packages/35/b2/da925693cb82a1208aa34966c0f36cb222baca94e729dd22a587bc22d0f3/ruff-0.9.9-py3-none-win_amd64.whl", hash = "sha256:837982ea24091d4c1700ddb2f63b7070e5baec508e43b01de013dc7eff974ff1", size = 11355632 },
+    { url = "https://files.pythonhosted.org/packages/31/d8/de873d1c1b020d668d8ec9855d390764cb90cf8f6486c0983da52be8b7b7/ruff-0.9.9-py3-none-win_arm64.whl", hash = "sha256:3ac78f127517209fe6d96ab00f3ba97cafe38718b23b1db3e96d8b2d39e37ddf", size = 10435860 },
+]
+
+[[package]]
+name = "scripts"
+version = "0.1.0"
+source = { virtual = "." }
+dependencies = [
+    { name = "ruff" },
+]
+
+[package.metadata]
+requires-dist = [{ name = "ruff", specifier = ">=0.9.9" }]
diff --git a/shell.nix b/shell.nix
index 4ce92352..82ead4dc 100644
--- a/shell.nix
+++ b/shell.nix
@@ -1,11 +1,12 @@
 { pkgs ? import <nixpkgs> {} }:
 
 pkgs.mkShell {
-  buildInputs = [
-    pkgs.nodejs
-    pkgs.nodePackages.pnpm
-    pkgs.jdk23
-    pkgs.gradle
+  buildInputs = with pkgs; [
+    nodejs
+    nodePackages.pnpm
+    jdk23
+    gradle
+    uv
   ];
 
   shellHook = ''
@@ -16,5 +17,6 @@ pkgs.mkShell {
     echo "PNPM version: $(pnpm --version)"
     echo "Java version: $(java --version)"
     echo "Gradle version: $(gradle --version)"
+    echo "UV version: $(uv --version)"
   '';
 }


Reviews:
user: login: gemini-code-assist[bot]
body: Hello @abhi-kr-2100, I'm Gemini Code Assist[^1]! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

## Summary of Changes
This pull request initializes a new Python project named 'scripts' intended for scraping language data to aid in creating language learning courses for Lingetic. It sets up the basic project structure, including a `main.py` file with a "Hello, world!" program, a `pyproject.toml` file for project metadata and dependencies (including Ruff for linting), a `.python-version` file specifying Python 3.12, a `README.md` file, and a `uv.lock` file to lock dependencies.

### Highlights
* **Project Initialization**: Sets up a basic Python project structure with essential files like `main.py`, `pyproject.toml`, and `README.md`.
* **Dependency Management**: Uses `uv` to manage dependencies, including Ruff for linting, and locks them in `uv.lock`.
* **Nix Environment**: Adds `uv` to the Nix shell environment for consistent dependency management.

### Changelog
<details>
<summary>Click here to see the changelog</summary>

* **scripts/.python-version**
  * Adds a file specifying the Python version to be used (3.12).
* **scripts/README.md**
  * Creates a basic README file describing the purpose of the scripts.
* **scripts/main.py**
  * Initializes a `main.py` file with a simple "Hello, world!" program.
* **scripts/pyproject.toml**
  * Configures project metadata, Python version requirement (>=3.12), and Ruff as a dependency.
* **scripts/uv.lock**
  * Locks the project dependencies, including Ruff version 0.9.9, with specific hashes and URLs for different platforms.
* **shell.nix**
  * Adds `uv` to the Nix shell's build inputs to ensure `uv` is available in the development environment.
  * Adds a shell hook to display the `uv` version when the shell is entered.

</details>


<details>

<summary><b>Using Gemini Code Assist</b></summary>
<br>

The full guide for Gemini Code Assist can be found on our [documentation page](https://developers.google.com/gemini-code-assist/docs/review-github-code), here are some quick tips.

<b>Invoking Gemini</b>

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either `/gemini <command>` or `@gemini-code-assist <command>`. Below is a summary of the supported commands.

Feature | Command | Description
--- | --- | ---
Code Review | `/gemini review` | Performs a code review for the current pull request in its current state.
Pull Request Summary | `/gemini summary` | Provides a summary of the current pull request in its current state.
Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments.
Help | `/gemini help` | Displays a list of available commands.

<b>Customization</b>

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a `.gemini/` folder in the base of the repository. Detailed instructions can be found [here](https://developers.google.com/gemini-code-assist/docs/review-github-code).

<b>Limitations & Feedback</b>

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with :thumbsup: and :thumbsdown: on @gemini-code-assist comments to provide feedback.

</details>

<b>You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the [Gemini Code Assist IDE Extension](https://cloud.google.com/products/gemini/code-assist).</b>


[^1]: Review the [Privacy Notices](https://policies.google.com/privacy), [Generative AI Prohibited Use Policy](https://policies.google.com/terms/generative-ai/use-policy), [Terms of Service](https://policies.google.com/terms), and learn how to configure Gemini Code Assist in GitHub [here](https://developers.google.com/gemini-code-assist/docs/review-github-code). Gemini can make mistakes, so double check it and [use code with caution](https://support.google.com/legal/answer/13505487).

---

**Trivia time!**

What is the purpose of the `pyproject.toml` file?

<details>
<summary><b>Click here for the answer</b></summary>
<br>
The `pyproject.toml` file is used to specify project metadata, dependencies, and build system requirements for Python projects. It is the standard configuration file for Python projects.

</details>

state: COMMENTED
author_association: NONE
submitted_at: 2025-03-01T09:47:56Z
user: login: gemini-code-assist[bot]
body: ## Code Review
This pull request introduces a new Python project using UV for managing dependencies and includes initial setup files. The changes look good overall, setting up a basic project structure and including necessary configurations. However, there are a few minor points to consider for improvement.

### Merge Readiness
The pull request is in good shape for merging. It sets up a basic project structure and includes necessary configurations. I am unable to directly approve the pull request, and users should have others review and approve this code before merging.
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-01T09:48:01Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 5**

<details>
<summary>🔭 Outside diff range comments (1)</summary><blockquote>

<details>
<summary>scripts/.python-version (1)</summary><blockquote>

`1-2`: _🧹 Nitpick (assertive)_

**Good Python version specification.**

Using Python 3.12 provides access to the latest language features. Just keep in mind that this is a relatively recent version that might not be available in all environments.


There's an extra empty line at the end of the file that can be removed.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: ASSERTIVE**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 142a88d741669a3e7539d704d2d1a9497a77ea8d and 0d8b522a6e19e0da7b1687518f6c0892ac828f80.

</details>

<details>
<summary>⛔ Files ignored due to path filters (1)</summary>

* `scripts/uv.lock` is excluded by `!**/*.lock`

</details>

<details>
<summary>📒 Files selected for processing (6)</summary>

* `.gitignore` (1 hunks)
* `scripts/.python-version` (1 hunks)
* `scripts/README.md` (1 hunks)
* `scripts/main.py` (1 hunks)
* `scripts/pyproject.toml` (1 hunks)
* `shell.nix` (2 hunks)

</details>

<details>
<summary>🔇 Additional comments (5)</summary><blockquote>

<details>
<summary>scripts/main.py (1)</summary>

`4-6`: **Basic scaffold for main function in place.**

This is a good starter template using proper Python idioms. As development continues, this function will need to be expanded to implement the language data scraping functionality mentioned in the PR objectives.

</details>
<details>
<summary>shell.nix (2)</summary>

`4-9`: **Good addition of UV to the build inputs!**

The syntax improvement using `with pkgs;` makes the code more concise, and adding UV aligns well with the PR objective of starting a Python project using UV for scripts.

---

`20-20`: **Nice touch adding the UV version output**

This addition maintains consistency with the other version outputs in the shell hook, making it easier to verify the UV version during development.

</details>
<details>
<summary>scripts/pyproject.toml (2)</summary>

`1-9`: **Project configuration looks good**

The metadata is well-structured with appropriate name, version, and description. Requiring Python 3.12+ is a good choice for a new project, ensuring access to the latest Python features.

---

`11-12`: **Ruff configuration is minimal but sufficient**

The line length setting of 80 characters is a good standard choice. As the project grows, you might want to add more Ruff configuration options like `select` to specify which linting rules to enable.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-01T10:20:31Z

Review comments:
diff_hunk: @@ -0,0 +1,9 @@
+#!/usr/bin/env python
path: scripts/main.py
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Update shebang line to specify Python 3.**

Since you're targeting Python 3.12 (as specified in `.python-version`), consider using `#!/usr/bin/env python3` to ensure the script always runs with Python 3.

```diff
-#!/usr/bin/env python
+#!/usr/bin/env python3
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
#!/usr/bin/env python3
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-03-01T10:20:29Z
author_association: NONE
diff_hunk: @@ -0,0 +1,9 @@
+#!/usr/bin/env python
+
+
+def main():
+    print("Hello, world!")
+
+
+if __name__ == "__main__":
+    main()
path: scripts/main.py
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Consider reducing excessive empty lines.**

The file contains multiple consecutive empty lines. Consider standardizing to a single empty line between logical sections for better readability.

```diff
 #!/usr/bin/env python3
 
-
 def main():
     print("Hello, world!")
 
-
 if __name__ == "__main__":
     main()
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
#!/usr/bin/env python3

def main():
    print("Hello, world!")

if __name__ == "__main__":
    main()
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-03-01T10:20:29Z
author_association: NONE
diff_hunk: @@ -0,0 +1,3 @@
+# Lingetic Scripts
+
+A collection of scripts to create Lingetic language learning courses.
path: scripts/README.md
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Good initial README.**

This provides a basic introduction to the purpose of these scripts. As the project evolves, consider expanding this README to include:

- Installation instructions
- Usage examples
- Description of individual scripts
- Requirements/dependencies
- Contribution guidelines

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-03-01T10:20:30Z
author_association: NONE
diff_hunk: @@ -22,3 +22,6 @@
 # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
 hs_err_pid*
 replay_pid*
+
+# Python build files
+*.pyc
path: .gitignore
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Good addition of Python pattern to .gitignore.**

Adding `*.pyc` files to .gitignore is appropriate. Consider also adding these common Python-related patterns:

```diff
 # Python build files
 *.pyc
+__pycache__/
+*.py[cod]
+*$py.class
+
+# Distribution / packaging
+dist/
+build/
+*.egg-info/
+
+# Virtual environments
+venv/
+.venv/
+env/
+ENV/
+
+# Testing
+.coverage
+htmlcov/
```




<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
# Python build files
*.pyc
__pycache__/
*.py[cod]
*$py.class

# Distribution / packaging
dist/
build/
*.egg-info/

# Virtual environments
venv/
.venv/
env/
ENV/

# Testing
.coverage
htmlcov/
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-03-01T10:20:30Z
author_association: NONE
diff_hunk: @@ -0,0 +1,12 @@
+[project]
+name = "scripts"
+version = "0.1.0"
+description = "A collection of scripts to create Lingetic language learning courses"
+readme = "README.md"
+requires-python = ">=3.12"
+dependencies = [
+    "ruff>=0.9.9",
+]
path: scripts/pyproject.toml
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Consider adding web scraping dependencies**

Since the PR objective mentions these scripts will be used to scrape language data, you might want to add common web scraping libraries like `requests`, `beautifulsoup4`, or `scrapy` to the dependencies.

```diff
dependencies = [
    "ruff>=0.9.9",
+    "requests>=2.31.0",
+    "beautifulsoup4>=4.12.2",
]
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
dependencies = [
    "ruff>=0.9.9",
    "requests>=2.31.0",
    "beautifulsoup4>=4.12.2",
]
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-03-01T10:20:30Z
author_association: NONE

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-03-01T09:47:53Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough
This pull request introduces several new files and configuration updates. In the **scripts** directory, new files include a Python version specifier (`.python-version`), a README detailing Lingetic language learning scripts, a simple `main.py` that prints "Hello, world!", and a project configuration file (`pyproject.toml`) outlining project settings and dependencies. Additionally, the `shell.nix` file has been updated to include the `uv` package in its build inputs and to output the package version during shell initialization.

## Changes

| File(s)                                           | Change Summary                                                                                                                                                                                                                     |
| ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `scripts/.python-version`, `scripts/README.md`,<br>`scripts/main.py`, `scripts/pyproject.toml` | New files added to the scripts directory: a Python version specifier (`3.12`), a README for Lingetic language learning scripts, a `main.py` that prints "Hello, world!", and a project configuration with dependencies and linting. |
| `shell.nix`                                       | Updated `buildInputs` to include the `uv` package and modified the `shellHook` to echo the `uv` package version during shell initialization.                                                                                     |
| `.gitignore`                                      | Added a new entry to ignore Python build files by including `*.pyc`.                                                                                                                                                             |

## Sequence Diagram(s)
```mermaid
sequenceDiagram
    participant U as User
    participant M as main.py
    participant C as Console

    U->>M: Execute script
    M->>M: Check if __name__ == "__main__"
    M->>C: Print "Hello, world!"
```

## Poem
> Hop, hop, in lines of code I play,  
> New files join the dance today,  
> Python 3.12 leads the way,  
> Lingetic scripts in bright array,  
> I, a bunny, cheer each code display!

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details>
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: abhi-kr-2100
created_at: 2025-03-01T09:48:02Z
body: * **#72** <a href="https://app.graphite.dev/github/pr/abhi-kr-2100/Lingetic/72?utm_source=stack-comment-icon" target="_blank"><img src="https://static.graphite.dev/graphite-32x32-black.png" alt="Graphite" width="10px" height="10px"/></a>
* **#71** <a href="https://app.graphite.dev/github/pr/abhi-kr-2100/Lingetic/71?utm_source=stack-comment-icon" target="_blank"><img src="https://static.graphite.dev/graphite-32x32-black.png" alt="Graphite" width="10px" height="10px"/></a>
* **#70** <a href="https://app.graphite.dev/github/pr/abhi-kr-2100/Lingetic/70?utm_source=stack-comment-icon" target="_blank"><img src="https://static.graphite.dev/graphite-32x32-black.png" alt="Graphite" width="10px" height="10px"/></a>
* **#69** <a href="https://app.graphite.dev/github/pr/abhi-kr-2100/Lingetic/69?utm_source=stack-comment-icon" target="_blank"><img src="https://static.graphite.dev/graphite-32x32-black.png" alt="Graphite" width="10px" height="10px"/></a>
* **#68** <a href="https://app.graphite.dev/github/pr/abhi-kr-2100/Lingetic/68?utm_source=stack-comment-icon" target="_blank"><img src="https://static.graphite.dev/graphite-32x32-black.png" alt="Graphite" width="10px" height="10px"/></a> 👈 <a href="https://app.graphite.dev/github/pr/abhi-kr-2100/Lingetic/68?utm_source=stack-comment-view-in-graphite" target="_blank">(View in Graphite)</a>
* `main`


<h2></h2>

This stack of pull requests is managed by <a href="https://graphite.dev?utm-source=stack-comment"><b>Graphite</b></a>. Learn more about <a href="https://stacking.dev/?utm_source=stack-comment">stacking</a>.
<!-- Current dependencies on/for this PR: -->
author_association: OWNER
user: login: github-actions[bot]
created_at: 2025-03-01T09:48:52Z
body: # [Qodana](https://qodana.cloud/projects/3ybyl/reports/7GEdb) for JVM

**It seems all right 👌**

No new problems were found according to the checks applied


☁️ [View the detailed Qodana report](https://qodana.cloud/projects/3ybyl/reports/7GEdb)

<details>
<summary>Contact Qodana team</summary>

Contact us at [qodana-support@jetbrains.com](mailto:qodana-support@jetbrains.com)
  - Or via our issue tracker: https://jb.gg/qodana-issue
  - Or share your feedback: https://jb.gg/qodana-discussions
</details>
<!-- JetBrains/qodana-action@v2024.3.4 : Qodana for JVM -->
author_association: NONE
user: login: abhi-kr-2100
created_at: 2025-03-01T13:43:37Z
body: ### Merge activity

* **Mar 1, 8:43 AM EST**: A user started a stack merge that includes this pull request via [Graphite](https://app.graphite.dev/github/pr/abhi-kr-2100/Lingetic/68).
* **Mar 1, 8:43 AM EST**: A user merged this pull request with [Graphite](https://app.graphite.dev/github/pr/abhi-kr-2100/Lingetic/68).

author_association: OWNER