50 pointsby antomal24 days ago23 comments
  • antomal24 days ago
    I've been working on GRSH because I wanted to explore building core system utilities using Rust's memory safety guarantees, with a specific focus on the FreeBSD ecosystem.

    While the shell is still in its early stages, my goal is to create a lightweight, fast, and secure alternative to traditional shells that feels at home on both FreeBSD and macOS.

    Key features I'm focusing on:

    Zero-cost abstractions for process management.

    Native performance on BSD-based systems.

    Minimalist design without the bloat of modern 'all-in-one' shells.

    I'm also developing DIR (a visual disk analyzer for FreeBSD) as part of this 'Grim Reaper' toolset.

    I would love to hear your feedback on the implementation or any specific features you'd like to see in a Rust-based shell for Unix systems.

    Source Code: https://github.com/antoniomalara301289/grsh Project Page: https://grimreaper.icu

  • antomal24 days ago
    Thanks for the question! For Job Control, I’m currently implementing a custom management system to handle foreground and background process groups.

    Regarding signal propagation, I’m leaning towards a direct integration with libc to maintain that 'native' feel you mentioned, specifically for managing tcsetpgrp and ensuring the terminal is correctly assigned to the active process group.

    One feature I’m particularly proud of is what I call 'Pinning': it allows the user to pin a specific process and recall it instantly. This is part of my effort to make GRSH feel more interactive than a standard POSIX shell.

    As for async signal handling, I'm currently refining the core loop to ensure that complex pipelines don't leave zombie processes or mismanaged groups on the FreeBSD kernel. It's a work in progress, and feedback on the current implementation in the repo is more than welcome!

  • womanpower24 days ago
    I have an idea for a feature-rich shell tailored for women’s health and productivity. The core idea is a menstrual cycle calendar integrated into the shell with these features: • Cycle tracking: Track period start/end, ovulation, and fertile days. • Notifications: Send email reminders when the period is expected to start. • Server-friendly: Run in the background on a server, integrating with cron or systemd. • Privacy-first: All data stored locally with optional encrypted backups. • CLI-friendly interface: Commands like cycle status, cycle next, cycle log.

    It would be a complex, useful, and empowering tool for anyone who wants to combine shell productivity with personal health. I’d love to explore implementing this in Rust.

    • antomal24 days ago
      This is a very unique and thoughtful feature request! I love the idea of making the shell more personal and empowering by integrating health tracking with terminal productivity.

      From a technical standpoint, implementing this in Rust would be great because of the strong focus on privacy and memory safety. The 'privacy-first' and 'local storage' aspects you mentioned align perfectly with the philosophy of GRSH.

      While my current roadmap is focused on core shell stability and the FreeBSD port, GRSH is designed to be extensible. This could be a fantastic candidate for a built-in module or a dedicated plugin.

      If you're interested in exploring how to implement this in Rust for GRSH, please feel free to open a discussion on the GitHub repo. I’d love to see how we can make the terminal a more inclusive and useful space for everyone

    • badantexpress24 days ago
      [dead]
  • giannicancelli24 days ago
    I would like the shell to support advanced job control: Ability to suspend processes (Ctrl+Z) and resume them (fg, bg). Display all active jobs with jobs. Interactively select which job to resume, for example via a numbered menu or a list to choose from, instead of manually typing fg %<job_number>. , support both foreground and background jobs and allow managing multiple jobs simultaneously.

    You can leverage existing bash/zsh functionality as a base, but the key feature is interactive job selection.

    • antomal24 days ago
      Actually, GRSH already supports this!

      You can use Ctrl+Z to suspend, and fg for basic job control. Regarding the interactive selection you mentioned: that’s one of the core features I wanted to get right from the start. Instead of memorizing job IDs, you can manage them interactively.

      I’m a big fan of reducing the cognitive load when multitasking in the terminal, so I’m glad we share the same vision for a more modern job control experience!

  • utentemedio24 days ago
    Great to see more Rust-based tooling coming to FreeBSD. Regarding the architecture, how are you handling Job Control and signal propagation? Specifically, are you using a custom wrapper for libc to manage tcsetpgrp and foreground process groups, or are you leveraging a specific Rust crate for asynchronous signal handling? I’m curious to see how GRSH maintains the 'native' feel when managing complex pipelines on the FreeBSD kernel.
  • antomal24 days ago
    I'm seeing some great technical questions about process lifecycles and Rust invariants. To clarify: regarding job control, when a process is recalled, it currently rejoins the foreground process group. I'm leveraging Rust's ownership model to ensure FDs are closed properly, but I'm still refining the signal semantics for SIGTSTP.
  • antomal24 days ago
    Thanks everyone for the incredible feedback! I'm seeing great suggestions about transparent archive navigation and plugin systems. I'm focusing on the FreeBSD port right now, but I'll be opening issues for these features on GitHub tonight. The interest in job control and Rust implementation details has been amazing.
  • ifh-hn24 days ago
    I've never seen so many people create accounts just to comment on a Show HN before.
    • antomal24 days ago
      I noticed that too, and I can assure you it’s purely organic. I’m just as surprised as you are!

      I suspect the project might have been shared in some FreeBSD or Rust-specific IRC channels or forums outside of HN, which brought in people who aren't regular HN users but are passionate about these specific technologies.

      It’s exciting to see new faces, but I definitely didn’t expect this level of influx!

    • tubs24 days ago
      Yeah what the heck is happening here? Agents gone wild?
      • antomal24 days ago
        I can promise you there are no agents or bots here—just a solo dev who's been working on a Rust shell for FreeBSD in his spare time.

        I think the 'weird' influx of new accounts is likely because this got picked up by some FreeBSD/Rust communities or Telegram/IRC groups where people aren't usually on HN. It’s my first time posting a project here, and I'm honestly just trying to keep up with the technical questions!

        If anyone is skeptical, I'd much rather talk about the code, the job control implementation, or the FreeBSD porting process. That’s why I’m here!

  • wezm24 days ago
    What does the "focus on the FreeBSD ecosystem" and "feels native to FreeBSD" mean in practice? I.e. are there FreeBSD specific features being utilised that prevent it working on Linux, or other BSDs?
    • antomal24 days ago
      Great question. In practice, 'native to FreeBSD' means a few things for grsh:

      System Integration: I’m prioritizing first-class support for FreeBSD-specific tools and environments (like Jails and the Ports system). While many shells treat BSD as an afterthought, I want grsh to feel like it was built specifically for the FreeBSD base system.

      Technical Implementation: Currently, I’m leveraging specific behaviors of the FreeBSD terminal driver and signal handling. While the Rust codebase is portable in theory, I’m not 'watering down' the features to guarantee Linux compatibility yet. I want to exploit FreeBSD’s strengths first.

      License & Philosophy: The project is under the BSD-3-Clause license, which aligns with the ecosystem's preference for permissive licensing.

      Can it work on Linux/other BSDs? Yes, it can be compiled on Linux, but you might find that certain job control nuances or terminal optimizations are currently 'tuned' for the FreeBSD kernel. I’d rather have it work perfectly on one OS than 'okay-ish' on all of them.

  • nosacciu24 days ago
    Could you implement a feature that makes it possible to cd into a compressed archive as though it were a normal directory?
    • antomal24 days ago
      That's an ambitious and fascinating feature request!

      Implementing transparent archive navigation (mounting archives as virtual directories) is definitely on my 'dream features' list for GRSH. Since the shell is written in Rust, I've been looking into FUSE-based solutions or leveraging something like libarchive to create a virtual file system layer.

      It’s a bit complex to get right—especially for performance and write support—but I've opened an issue on GitHub to track this idea. I'd love to explore this once the FreeBSD Port and core stability are finalized.

      Thanks for the great suggestion!

  • ladycron24 days ago
    Is it possible to install it in ubuntu with apt install grsh? For me no
    • antomal24 days ago
      Not yet! grsh is currently in its early stages, and I haven't submitted it to the official Ubuntu/Debian repositories yet.

      However, since it's written in Rust, you can easily install it from source on Ubuntu:

      Install Rust: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

      Clone the repo and run: cargo install --path .

      I am currently prioritizing the FreeBSD Ports collection, but creating a .deb package or a PPA for Ubuntu is definitely on the roadmap. If anyone wants to help with the packaging, feel free to reach out on GitHub!

  • ladybanshee24 days ago
    Could you explain the purpose of mkcd?
    • antomal24 days ago
      It’s a shortcut

      Its purpose is to combine mkdir -p and cd into a single atomic-like action. Instead of typing: mkdir -p my_project && cd my_project

      You simply run: mkcd my_project

      It's designed to reduce friction during development, especially when you're frequently creating new nested directory structures.

    • az09mugen24 days ago
      Not the author, but my first guess is to create a folder and cd into it with just one command instead of 2 with the said argument, isn't it ?
      • antomal24 days ago
        Exactly. It's a small quality-of-life feature to avoid the repetitive mkdir && cd sequence. In GRSH, it also ensures the directory is created with the necessary permissions before the shell attempts to switch into it.
        • 22 days ago
          undefined
        • az09mugen24 days ago
          I love the concept, very good yet simple idea ! I'll steal it for my aliases.
          • antomal24 days ago
            Go ahead and 'steal' away! That’s the beauty of open source.

            I actually built it into the shell precisely because I was tired of managing those aliases across different machines. Glad you found it useful!

        • danabowler22 days ago
          Is it not possible to realize it with alias?
          • antomal22 days ago
            Great question! While you could technically hack a similar behavior using a shell function (not a simple alias, as aliases don't handle positional arguments well), grsh implements mkcd as a native builtin. By baking it into the shell in Rust, I can ensure atomic execution and better error handling without relying on the user's specific .bashrc or .zshrc hacks. It's about providing a 'batteries-included' experience where common workflows are first-class citizens of the shell itself.
  • fabiominnelli24 days ago
    Finalmente la prima Shell Italiana.
  • freebsduserok22 days ago
    Is it in freebsd repo?
    • antomal22 days ago
      It's not in the official repo just yet, but the Port is already under review on FreeBSD Bugzilla! I’m currently working through the review process to get it merged into the official ports collection. In the meantime, you can build it from source via Cargo or check out the progress on the Bugzilla ticket.
  • mimmetta23 days ago
    Is There autocomplete?
    • antomal23 days ago
      Yes, absolutely! Autocomplete is a core feature of grsh. It currently supports history for single command and Standard command/file completion
  • gallobelotti22 days ago
    Great Shell!
  • unmole24 days ago
    > native to FreeBSD but works seamlessly on macOS

    What does that even mean? In what way do other shells not feel native to FreeBSD?

    • antomal23 days ago
      That’s a fair point. To be concrete, 'native to FreeBSD' in the context of grsh refers to three design choices where general-purpose shells often feel like guests:

      Direct System Integration: Most shells target a generic POSIX or GNU/Linux environment. grsh is being built with FreeBSD-specific subsystems in mind—specifically Jails awareness (knowing if you are inside one and interacting with it) and planned ZFS integration for smarter path completions and status reporting.

      The 'Base System' Philosophy: FreeBSD users generally prefer the 'base system' vs 'ports' distinction. I've chosen the BSD-3-Clause license and focused on keeping dependencies minimal to align with the FreeBSD architectural style, rather than bringing in the heavy baggage often found in Linux-first projects.

      Signal & TTY Handling: Implementing job control directly against the FreeBSD termios and signal delivery nuances. While Rust provides abstractions, the 'feel' of a shell depends on how it handles these OS-specific edge cases.

      Regarding macOS: It’s 'seamless' because macOS (via Darwin) shares that BSD heritage. The implementation for process management and terminal control translates much more naturally to macOS than it does to Linux, which often requires specific workarounds for its PTY/TTY behavior.

      In short: I’m building for the BSD crowd first, not as an afterthought.

  • vincdelbosque24 days ago
    [dead]
  • marjanrejewski24 days ago
    [dead]
  • FreeBSDUser24 days ago
    [dead]
  • GuyThreepwood24 days ago
    [dead]
  • Ziodallamerica24 days ago
    [dead]
  • Austriahacker24 days ago
    [dead]