A comfy custom IDE where you can feel right at home

Overview

reZIDE Tests Codecov PyPI

a comfy custom IDE where you can feel right at home 🏡

Use simple, declarative configuration files to create complex IDEs with a single command!

screencap (Click to go to Youtube)

What's it like?

Think of it like any available IDE, except:

  • You can read and write your configurations easily in TOML format
  • You can use any program that you prefer without waiting for anyone else to add a plugin/integration. If you can run it on your command line, you can run it in reZIDE! Editors, linters, autoformatters, typecheckers, ASCII movies, distracting videos, etc...
  • You can share your configurations with others
  • You can copy/learn from others' configurations

Or think of it like tmux, except:

  • You don't need to learn new movement commands (use the commands that you already use for your window manager)
  • You aren't restricted to applications with a Terminal User Interface (you can open web browsers, pdf previews, video players, etc.)

Who's it for?

You'll probably like this if you:

  • use a tiling window manager or are interested in tiling window managers
  • enjoy the Unix philosophy ("have a lot of tools in your toolbox that each do one job well and play nicely with others")

This probably isn't the thing you're looking for if you:

  • want something that "just works". Having lots of tools means you have to do some amount of learning about each tool before you can use them. A lot of that burden is mitigated by copying other people's config files, but in general, tiling window managers have a bit of a learning curve so I would say that this project may not the best fit for people that are looking for a "just works" type of product.

What's it stand for?

⬅️⬅️(Zach's)
⬇️   really
⬇️   enjoyable
➡️➡️ Z
     Integrated
     Development
     Environment

Because that's how acronyms work.

Credits to @hyangda for brainstorming this great name with me 😄

Requirements

One of these tiling window managers:

  • sway
  • i3 (it should work out of the box, but I'm too lazy to install i3 just to test this. if you can confirm on my behalf, please check this box and submit a PR!)

At least 1 configuration file

See examples.

Installation

I recommend using pipx for environment isolation:

pipx install reZIDE

You can also use pip if you don't mind modifying your system Python environment:

pip install reZIDE

How to use

Quickstart

  1. copy examples to ~/.rezide
    git clone https://github.com/abstractlyZach/reZIDE
    cp -r reZIDE/examples "${HOME}/.rezide"
  2. Update the config file to match your system's needs. Adjustment instructions can be found inside the file that we're going to edit
    # open config with vi. use whatever editor you prefer
    vi ~/.rezide/rice/config.toml
  3. spawn windows
    # spawn windows for the "rice" layout
    rzd open rice

Detailed instructions

Run this command for documentation on how to use reZIDE:

rzd --help

Motivation

Tiling window managers are powerful and flexible and I love using them. However, I kept finding myself running into one issue: I'm lazy.

Whenever I sit down to work, I usually want to open a group of 2+ windows. Each window takes 5s-30s to get to a useful state. That's way too much effort. I couldn't be bothered.

Here are some groups of windows (AKA layouts) that I commonly use:

python mode

  • editor for source code
  • editor for tests
  • browser for documentation/tickets
  • terminal for arbitrary commands like linting, running tests, and installing packages

web dev mode

  • editor for source code
  • editor for tests
  • small terminal running linter
  • small terminal using a filewatcher to run tests
  • small terminal running the typescript compiler
  • medium terminal for running arbitrary commands

documentation mode

  • editor for document
  • browser/pager for source material
  • terminal for compiling document into pdf
  • pdf viewer for viewing compiled pdf

It usually takes at least 10 keystrokes to run a command (even with tab-completion and fuzzy-finding) and then another 5-15 keystrokes to resize the window so that it's as big or small as I want. Here's an example:

Spawning and resizing a single window

  • to open a terminal
  • cdd to cd but with fuzzy-finding
  • type rez to get ~/workspace/abstractlyZach/reZIDE/ to show up as the first result
  • fd | entr make typecheck to automatically run my typechecker whenever files change
  • to enter "resize" mode
  • left x5 to make the window smaller
  • to exit "resize" mode

And then I have to do that like 5 more times; that's too much work! 😤 I'm losing seconds of productivity every day just opening, commanding, and resizing windows!

Goals

  • use only i3/sway to manage windows
  • create a DIY IDE with a single command
  • allow different IDEs to be defined through a readable file (like TOML)
  • run arbitrary commands (not just shells and TUIs!)

Defining an IDE in TOML

Basic Python IDE

This Python IDE has a relatively basic TOML file. Here's what the final product looks like:

python IDE

# python IDE
[python]

# tells reZIDE that this is a layout and it should construct a tree out of it and its descendants
is_layout = true

# this is what % of the screen each child should take up
# in this case, it's a 50-50 split
sizes = [50, 50]

# tells reZIDE the names of the Windows and Sections that belong in the "python" Section
# reZIDE will look up these Window and Section definitions elsewhere in this file and
#   build them appropriately
# so here, we have terminals on the left side and documentation on the right side
children = ['terminals', 'documentation']

# the screen should be split horizontally so that the children are to the left and right
#   of each other
split = "horizontal"


[terminals]
sizes = [50, 50]
children = ['python-editor', 'python-gutter']
split = 'vertical'

# our first Window definition
[python-gutter]

# run this command to:
# * spawn an alacritty window
# * set the working directory to ~/workspace/python-ide/
# * print some ascii art onto the terminal
# * start a zsh interactive shell
command = """
    alacritty \
        --working-directory ~/workspace/python-ide/ \
        -e sh -c 'cat python.logo.colored.asciiart; zsh'
"""

# mark this window in the window manager as 'python-gutter'
mark = 'python-gutter'


[python-editor]
command = """
    alacritty \
        --working-directory ~/workspace/python-ide/ \
        -e sh -c 'cp script_template.py script.py; kak script.py; zsh'
"""
mark = 'python-editor'

[documentation]
command = "brave --new-window https://docs.python.org/3/"
mark = 'documentation'

A complexer IDE

This IDE gives us everything we need to have a smooth development session when working on the reZIDE project.

Try opening the screenshot in another tab/window and see if you can match all of the Window/Section definitions in the TOML file to their corresponding areas on the screenshot!

rezide_ide

# more-complicated IDE for developing the reZIDE source code
[rezide-ide]
is_layout = true
split = "horizontal"
children = ['linters', 'main', 'tests']
sizes = [20, 60, 20]

# 1st level
# ---------------------------------------------------------------------------------------
[linters]
split = "vertical"
sizes = [50, 50]
children = ['formatting', 'typechecking']

[main]
split = "vertical"
children = ['editors', 'gutter']
sizes = [70, 30]

[tests]
command = """
    alacritty \
        --working-directory ~/workspace/abstractlyZach/reZIDE/ \
        -e sh -c 'fd | entr make test; zsh'
"""
mark = "tests"

# 2nd level
# ---------------------------------------------------------------------------------------

[formatting]
command = """
    alacritty \
        --working-directory ~/workspace/abstractlyZach/reZIDE/ \
        -e sh -c \
            'fd | entr sh -c \"echo && make format && make lint && echo_success\"; zsh'
"""
mark = "formatting"

[typechecking]
command = """
    alacritty \
        --working-directory ~/workspace/abstractlyZach/reZIDE/ \
        -e sh -c 'fd | entr make typecheck; zsh'
"""
mark = "typechecking"

[editors]
sizes = [50, 50]
children = ['left-editor', 'right-editor']
split = "horizontal"

[gutter]
command = """
    alacritty \
        --working-directory ~/workspace/abstractlyZach/reZIDE/ \
        -e sh -c 'neofetch; zsh'
"""
mark = "gutter"

# 3rd level
# ---------------------------------------------------------------------------------------
[left-editor]
command = """
    alacritty \
        --working-directory ~/workspace/abstractlyZach/reZIDE/ \
        -e sh -c 'kak src/rezide/rezide.py'
"""
mark = "left-editor"

[right-editor]
command = """
    alacritty \
        --working-directory ~/workspace/abstractlyZach/reZIDE/ \
        -e sh -c 'kak README.md'
"""
mark = "right-editor"

Shell Completion

Setting up completion for your shell

Alternatives

  • tmux
  • anything by jetbrains lul
You might also like...
switching computer? changing your setup? You need to automate the download of your current setup? This is the right tool for you :incoming_envelope:

🔮 setup_shift(SS.py) switching computer? changing your setup? You need to automate the download of your current setup? This is the right tool for you

A custom Discord Rich Presence to display when you're studying so you're stupid friends won't disturb you when you're studying.

Studying RPC Description A custom Discord Rich Presence to display when you're studying so you're stupid friends won't disturb you when you're studyin

A Home Assistant custom component for Lobe. Lobe is an AI tool that can classify images.
A Home Assistant custom component for Lobe. Lobe is an AI tool that can classify images.

Lobe This is a Home Assistant custom component for Lobe. Lobe is an AI tool that can classify images. This component lets you easily use an exported m

Python module that makes working with XML feel like you are working with JSON

xmltodict xmltodict is a Python module that makes working with XML feel like you are working with JSON, as in this "spec": print(json.dumps(xmltod

A terminal tool for git. When we use git, do you feel very uncomfortable with too long commands
A terminal tool for git. When we use git, do you feel very uncomfortable with too long commands

PIGIT A terminal tool for git. When we use git, do you feel very uncomfortable with too long commands. For example: git status --short, this project c

You can easily send campaigns, e-marketing have actually account using cash will thank you for using our tools, and you can support our Vodafone Cash +201090788026

*** Welcome User Sorry I Mean Hello Brother ✓ Devolper and Design : Mokhtar Abdelkreem ========================================== You Can Follow Us O

Repo Home WPDrawBot - (Repo, Home, WP) A powerful programmatic 2D drawing application for MacOS X which generates graphics from Python scripts. (graphics, dev, mac)

DrawBot DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics. The built-in

Markup is an online annotation tool that can be used to transform unstructured documents into structured formats for NLP and ML tasks, such as named-entity recognition. Markup learns as you annotate in order to predict and suggest complex annotations. Markup also provides integrated access to existing and custom ontologies, enabling the prediction and suggestion of ontology mappings based on the text you're annotating.
Markup is an online annotation tool that can be used to transform unstructured documents into structured formats for NLP and ML tasks, such as named-entity recognition. Markup learns as you annotate in order to predict and suggest complex annotations. Markup also provides integrated access to existing and custom ontologies, enabling the prediction and suggestion of ontology mappings based on the text you're annotating.

Markup is an online annotation tool that can be used to transform unstructured documents into structured formats for NLP and ML tasks, such as named-entity recognition. Markup learns as you annotate in order to predict and suggest complex annotations. Markup also provides integrated access to existing and custom ontologies, enabling the prediction and suggestion of ontology mappings based on the text you're annotating.

This is a passport scanning web service to help you scan, identify and validate your passport created with a simple and flexible design and ready to be integrated right into your system!
This is a passport scanning web service to help you scan, identify and validate your passport created with a simple and flexible design and ready to be integrated right into your system!

Passport-Recogniton-System This is a passport scanning web service to help you scan, identify and validate your passport created with a simple and fle

Reverse the infix string. Note that while reversing the string you must interchange left and right parentheses

Reverse the infix string. Note that while reversing the string you must interchange left and right parentheses. Obtain the postfix expression of the infix expression Step 1.Reverse the postfix expression to get the prefix expression

A calendaring app for Django. It is now stable, Please feel free to use it now. Active development has been taken over by bartekgorny.

Django-schedule A calendaring/scheduling application, featuring: one-time and recurring events calendar exceptions (occurrences changed or cancelled)

A calendaring app for Django. It is now stable, Please feel free to use it now. Active development has been taken over by bartekgorny.

Django-schedule A calendaring/scheduling application, featuring: one-time and recurring events calendar exceptions (occurrences changed or cancelled)

a plugin for py.test that changes the default look and feel of py.test (e.g. progressbar, show tests that fail instantly)
a plugin for py.test that changes the default look and feel of py.test (e.g. progressbar, show tests that fail instantly)

pytest-sugar pytest-sugar is a plugin for pytest that shows failures and errors instantly and shows a progress bar. Requirements You will need the fol

A Python utility belt containing simple tools, a stdlib like feel, and extra batteries. Hashing, Caching, Timing, Progress, and more made easy!
A Python utility belt containing simple tools, a stdlib like feel, and extra batteries. Hashing, Caching, Timing, Progress, and more made easy!

Ubelt is a small library of robust, tested, documented, and simple functions that extend the Python standard library. It has a flat API that all behav

A Python utility belt containing simple tools, a stdlib like feel, and extra batteries. Hashing, Caching, Timing, Progress, and more made easy!
A Python utility belt containing simple tools, a stdlib like feel, and extra batteries. Hashing, Caching, Timing, Progress, and more made easy!

Ubelt is a small library of robust, tested, documented, and simple functions that extend the Python standard library. It has a flat API that all behav

An advanced multi-threaded, multi-client python reverse shell for hacking linux systems. There's still more work to do so feel free to help out with the development. Disclaimer: This reverse shell should only be used in the lawful, remote administration of authorized systems. Accessing a computer network without authorization or permission is illegal.
Bit is Python's fastest Bitcoin library and was designed from the beginning to feel intuitive, be effortless to use, and have readable source code.

Bit is Python's fastest Bitcoin library and was designed from the beginning to feel intuitive, be effortless to use, and have readable source code.

WordPress look and feel for Django administration panel
WordPress look and feel for Django administration panel

Django WP Admin WordPress look and feel for Django administration panel. Features WordPress look and feel New styles for selector, calendar and timepi

Comments
  • Split example config files

    Split example config files

    Update the config files so that they're split well for examples

    • Add prettier config for toml
    • Add example toml files
    • fix pyproject.toml
    • remove outdated config
    • Remove marks
    documentation 
    opened by abstractlyZach 1
Releases(v0.10.0)
  • v0.10.0(Jul 30, 2021)

    What’s Changed

    • Bump minor version (#85) @abstractlyZach

    :boom: Breaking Changes

    • use configdir for main script (#79) @abstractlyZach
    • Use ConfigDir for listing layouts (#78) @abstractlyZach
    • read config files from directory (#77) @abstractlyZach

    :package: Build System

    • Add autoformat command (#80) @abstractlyZach

    :books: Documentation

    • Make autorunners clear the terminal whenever they run again (#84) @abstractlyZach
    • update readme (#82) @abstractlyZach

    :rocket: Features

    • add layout total size rule (#83) @abstractlyZach
    • use configdir for main script (#79) @abstractlyZach
    • Use ConfigDir for listing layouts (#78) @abstractlyZach
    • read config files from directory (#77) @abstractlyZach
    • prep for config dir (#76) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v0.9.1(Jul 18, 2021)

    What’s Changed

    • Bump patch version (#75) @abstractlyZach

    :package: Build System

    • Add poetry.lock target to makefile (#62) @abstractlyZach

    :construction_worker: Continuous Integration

    • Add targets for dev and CI setup (#64) @abstractlyZach
    • move mypy into pyproject (#61) @abstractlyZach

    :books: Documentation

    • Split example config files (#73) @abstractlyZach
    • Update README.md (#72) @abstractlyZach
    • Add youtube screencap (#71) @abstractlyZach
    • Add comment (#70) @abstractlyZach
    • update readme (#68) @abstractlyZach
    • update readme (#67) @abstractlyZach
    • Update readme's basic description (#66) @abstractlyZach
    • Add reZIDE logo (#65) @abstractlyZach

    :hammer: Refactoring

    • Refactor config reader files (#74) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v0.9.0(Jul 14, 2021)

  • v0.8.0(Jul 14, 2021)

    What’s Changed

    • Bump minor version (#58) @abstractlyZach
    • Add git files to gitignore so that fd can work better (#55) @abstractlyZach

    :books: Documentation

    • update coverage badge (#57) @abstractlyZach
    • Fix github badge (#56) @abstractlyZach
    • Use github directory for more expressiveness in readme (#54) @abstractlyZach

    :rocket: Features

    • shell completion (#52) @abstractlyZach

    :hammer: Refactoring

    • rename project (#53) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • 0.7.0(Jul 13, 2021)

    What’s Changed

    • Bump minor version (#51) @abstractlyZach
    • Add extra window manager log statements (#48) @abstractlyZach
    • Use a smaller traceback level if we're using a lower verbosity (#49) @abstractlyZach
    • Wait for window manipulation events to start doing other actions (#46) @abstractlyZach
    • Move verbosity into the start of the program (#47) @abstractlyZach
    • rename container to section (#45) @abstractlyZach
    • Add window document (#44) @abstractlyZach
    • Mark containers when splitting them (#43) @abstractlyZach
    • use windows and containers (#42) @abstractlyZach

    :boom: Breaking Changes

    • print layout names (#50) @abstractlyZach

    :rocket: Features

    • print layout names (#50) @abstractlyZach
    • rule validation (#41) @abstractlyZach

    :hammer: Refactoring

    • print layout names (#50) @abstractlyZach
    • rule validation (#41) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Jun 21, 2021)

    What’s Changed

    • Bump minor version (#40) @abstractlyZach
    • test magic tiler script (#31) @abstractlyZach
    • test window size script (#30) @abstractlyZach
    • Add tests for the get-tree script (#29) @abstractlyZach
    • read config files episode 2 (#28) @abstractlyZach
    • Add tests for tree (#25) @abstractlyZach

    :books: Documentation

    • document magic tiler script (#36) @abstractlyZach
    • Add more interesting windows to the example (#26) @abstractlyZach

    :rocket: Features

    • redesign config (#39) @abstractlyZach
    • read config files (#27) @abstractlyZach

    :hammer: Refactoring

    • redesign config (#39) @abstractlyZach
    • Separate Layout Parsing from Window Management (#38) @abstractlyZach
    • Refactor layout (#37) @abstractlyZach
    • Add magic tiler tests (#35) @abstractlyZach
    • Refactor Magic Tiler into a class (#34) @abstractlyZach
    • Move verbosity into magic-tiler (#33) @abstractlyZach
    • refactor layout (#32) @abstractlyZach
    • read config files (#27) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(May 30, 2021)

    What’s Changed

    • Bump version to 0.5.0 (#24) @abstractlyZach
    • update main example (#19) @abstractlyZach

    :boom: Breaking Changes

    • split windows correctly (#23) @abstractlyZach

    :rocket: Features

    • split windows correctly (#23) @abstractlyZach
    • do layout math (#20) @abstractlyZach

    :hammer: Refactoring

    • reimplement window creation (#22) @abstractlyZach
    • Quality of life changes (#21) @abstractlyZach
    • Create module for DTOs (#18) @abstractlyZach
    • refactor shared interfaces (#17) @abstractlyZach

    :fire: Removals and Deprecations

    • reimplement window creation (#22) @abstractlyZach
    • Quality of life changes (#21) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v.0.4.0(May 21, 2021)

    What’s Changed

    • Bump minor version (#16) @abstractlyZach
    • Create tiles and windows (#14) @abstractlyZach
    • Convert configs from toml to python classes for layout management (#13) @abstractlyZach
    • Use TOML (#12) @abstractlyZach

    :hammer: Refactoring

    • Use marks (#15) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(May 19, 2021)

    What’s Changed

    • Bump minor version (#11) @abstractlyZach
    • Add motivation into readme (#9) @abstractlyZach
    • Create vertical and horizontal windows (#8) @abstractlyZach
    • Check for empty workspace (#7) @abstractlyZach

    :books: Documentation

    • Add resizing functionality (#10) @abstractlyZach

    :rocket: Features

    • Add resizing functionality (#10) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(May 18, 2021)

    What’s Changed

    • bump version (#6) @abstractlyZach
    • Use pyproject.toml as the version Source of Truth (#3) @abstractlyZach
    • Add ci (#2) @abstractlyZach
    • First commit (#1) @abstractlyZach

    :rocket: Features

    • create main script (#5) @abstractlyZach
    • Add basic window management (#4) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
Owner
Zach
Hi! :wave:
Zach
Python IDE or notebook to generate a basic Kepler.gl data visualization

geospatial-data-analysis [readme] Use this code in your Python IDE or notebook to generate a basic Kepler.gl data visualization, without pre-configura

null 2 Sep 5, 2022
An amazing simple Python IDE for developers!

PyHub An amazing simple Python IDE for developers! Get ready to compile and run your code in the most simplest and easiest IDE of the ancient world! T

Aniket Bhattacharjee 2 Dec 31, 2022
Jarvide - A powerful AI mixed with a powerful IDE.

Jarvide About Jarvide Welcome to Jarvide. A powerful AI mixed with a powerful ID

Caeden 23 Oct 28, 2022
{Ninja-IDE Is Not Just Another IDE}

Ninja-IDE Is Not Just Another IDE Ninja-IDE is a cross-platform integrated development environment (IDE) that allows developers to create applications

ninja-ide 919 Dec 14, 2022
ConnectLearn is an easy to use and deploy Open-Source Project meant to make it easier for the right students to find the right teachers online.

ConnectLearn ConnectLearn is an easy to use and deploy Open-Source Project meant to make it easier for the right students to find the right teachers o

Aditya 5 Oct 24, 2021
A discord Server Bot made with Python, This bot helps people feel better by inspiring them with motivational quotes or by responding with a great message, also the users of the server can create custom messages by telling the bot with Commands.

A discord Server Bot made with Python, This bot helps people feel better by inspiring them with motivational quotes or by responding with a great message, also the users of the server can create custom messages by telling the bot with Commands.

Aran 1 Oct 13, 2021
IDE allow you to refactor code, Baron allows you to write refactoring code.

Introduction Baron is a Full Syntax Tree (FST) library for Python. By opposition to an AST which drops some syntax information in the process of its c

Python Code Quality Authority 278 Dec 29, 2022