ohmyi3


Nameohmyi3 JSON
Version 0.1.5 PyPI version JSON
download
home_pagehttps://github.com/ohmyi3/ohmyi3
SummaryDynamic i3 Configuration Manager
upload_time2024-07-09 03:27:43
maintainerNone
docs_urlNone
authorMatthew Reschke
requires_python<4.0,>=3.9
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Ohmyi3


Ohmyi3 provides a dynamic template engine for your i3 configs providing variable
and conditional driven i3 settings.

Ideal for those that use i3 on many of their systems and want to maintain a single
global repository that morphs to each computers environment based on hostname, user
and any other dynamic variable.


## Features
- Single `~/.config/ohmyi3/config.py` to dynamic variables to i3 configs
- One set of configs morphs based on your hostname, desktop environment or any variable you care to define.
- Uses python jinja2 templates to add variables and conditions to your i3 [or any] configs
- Plugins and hooks allow you to control all aspects of your system from a single config
    - Not only can you template dynamic i3 configs, but you can also:
    - Template alacritty, polybar, nitrogen, feh and anything else...its all python and jinja2, limitless
- Powered by https://github.com/uvicore/framework


## Installation

1. Install from Pypi https://pypi.org/project/ohmyi3/ with `pip`
```
pip install ohmyi3
```

2. Initialize a fresh ohmyi3 config.  This creates a `~/.config/ohmyi3` and
populates it with a good set of defaults you can work with.
```
i3ctl init
```

3. Modify the stock `~/.config/ohmyi3/config.d/*` i3 configs to suit your needs.
Add any `*.conf` file you want.  They are all picked up in alphabetical order.

4. The `theme` variable picks the theme from `~/.config/ohmyi3/themes` folder.
Bring your own themes.

4. **NOTICE:** Review and modify stock `~/.config/ohmyi3/config.py` configuration.  This is
just a stock example.  **DO NOT run it as is.**  You need to tune this to fit your
system.  All of the variables defined in that file will be available as jinja2
variables when templating i3 and the rest of your system.

    Pay special attention to the `after_generate` hooks.  You will want to comment
    those out and use them as needed.  To review the plugin code see the
    `~/.config/ohmyi3/plugins` directory.  Plugins are very simple system
    modification scripts.  Please review and write your own to suit your needs.

5. Once you have tuned your variables, you can see the resulting dictionary
```
i3ctl info
```

6. If you like all the variables, and have **used the plugins with caution**
you can now run the generator to template `~/.config/ohmyi3/config.d/*` i3 configs
which will output a new i3 file to `~/.config/i3/config` (it WILL save a backup
to that same folder before it overrides a new file)
```
i3ctl generate
```

Example CLI Output
```
:: Generating new i3 config using ohmyi3 ::
   + Firing user defined before_generate hook
   * Backing up /home/mreschke/.config/i3/config to /home/mreschke/.config/i3/backup-2023-04-20_17-36-41
   - Appending /home/mreschke/.files/configs/i3/config.d/00-header.conf
   - Appending /home/mreschke/.files/configs/i3/config.d/05-system.conf
   - Appending /home/mreschke/.files/configs/i3/config.d/10-autostart.conf
   - Appending /home/mreschke/.files/configs/i3/config.d/15-borders.conf
   - Appending /home/mreschke/.files/configs/i3/config.d/20-navigation.conf
   - Appending /home/mreschke/.files/configs/i3/config.d/80-applications.conf
   - Appending /home/mreschke/.files/configs/i3/config.d/85-windows.conf
   - Appending /home/mreschke/.files/configs/i3/config.d/90-gaps.conf
   * Appending THEME pink
   * Copying /home/mreschke/.files/configs/i3/themes/i3status.conf to /home/mreschke/.config/i3status/config
   + Firing user defined after_generate hook
   > Plugin Nitrogen: nitrogen --save --set-zoom-fill /home/mreschke/Wallpaper/De/budgie.jpg > /dev/null 2>&1
   > Plugin Archey3: sed -i 's/archey3.*/archey3 -c magenta/g' ~/.zshrc
   > Plugin Archey3: sed -i 's/archey3.*/archey3 -c magenta/g' ~/.bashrc
   > Plugin Polybar: Templating /home/mreschke/.files/configs/polybar/qpanels/panel/deepin.j2.ini
   > Plugin Alacritty: Templating /home/mreschke/.files/configs/alacritty/alacritty.j2.yml

Done!
New /home/mreschke/.config/i3/config generated!
Please reload i3!
```

7. Reload i3



## Most Basic Example

If your `~/.config/ohmyi3/config.py` looked like this
```python
...
def config():
    host = util.hostname()
    theme = 'archlinux'
...
```

And you had only a single file `~/config/ohmyi3/config.d/01-test.conf`
```jinja
# My dynamic i3 config

Your hostname is {{ host }}

{% if host == 'sunjaro' %}
Add i3 configs specifically for {{ host }}
{% endif %}

I love the {{ theme }} theme
```

After running `i3ctl generate`, your final `~/.config/i3/config` would look like this
```
# My dynamic i3 config

Your hostname is sunjaro
Add i3 configs specifically for sunjaro
I love the archlinux theme
```



## Sample the Power

`~/.config/ohmyi3/config.py`
```python
import uvicore
from ohmyi3 import util
from uvicore.typing import Dict
from uvicore.configuration import env
from uvicore.support.dumper import dump, dd
from ohmyi3.util import set, gather, path, plugin

# Ohmyi3 user configuration.
#
# This config is what drives the i3ctl generator.
# All variables inside config() will be available to the jinja2 templating engine
# and may be used in your config.d/* i3 configs for dynamic conditions.
# Use the before_generate() and after_generate() hooks to fire off plugins/*
# to control the rest of your system (set wallpaper, alacritty themes, polybar...)
# From here on out, the power is in your hands.  Automation is now limitless!

def config():
    """Ohmyi3 variables for configuring and templating i3"""

    # Hostname and user from system
    host = util.hostname()
    user = util.loggedinuser()


    # Paths to all relevant locations
    # If you need to change the ohmyi3 path, use the
    # environment variable OHMYI3_PATH (default ~/.config/ohmyi3)
    ohmyi3_path = uvicore.config('ohmyi3.config_path')
    paths = set({
        'ohmyi3': path(ohmyi3_path),
        'ohmyi3_configd': path([ohmyi3_path, 'config.d']),
        'ohmyi3_themes': path([ohmyi3_path, 'themes']),
        'i3': path('~/.config/i3'),
        'i3status': path('~/.config/i3status'),
        'alacritty': path('~/.config/alacritty'),
        'polybar': path('~/.config/polybar'),
    })

    # Unix OS Variant
    os = set('manjaro', host, {
        'p14s': 'lmde',
    })


    # Main network interface
    net_interface = set('enp11s0', host, {
        'p15': 'enp11s0',
        'p53': 'wlp0s20f3',
        'deajaro': 'wlp2s0',
    })


    # Has battery (laptop?)
    has_battery = set(True, host, {
        'sunjaro': False,
        'p53': True,
        'p15': True,
        'p14s': True,
    })
    battery_device = set('BAT0')


    # Backlinght
    backlight_device = set('intel_backlight')


    # Desktop Environment (kde, xfce, i3, cinnamon, mate, gnome)
    # I like to run i3 inside kde and xfce etc...  If runing under these DE's
    # I need to tweak the configs (no screen lock, different autostarts etc...)
    desktop = set('i3', host, {
        'sunjaro': 'kde',
        'p53': 'i3',
        'p15': 'i3',
        #'p14s': 'cinnamon',
    })


    # Main desktop tools (kde, xfce...)
    # Not the same as desktop, which is the running Desktop Environment
    desktop_tools = set('kde', host, {
        'deajaro': 'xfce'
    })


    # Using i3 capable of gaps
    i3_gaps = set(True, host, {
        'p14s': False
    })


    # Restart i3 command
    i3_restart = set('~/.files/scripts/i3ctl-dev generate && i3-msg restart', host, {
        'deajaro': 'i3ctl generate && i3-msg restart',
        'p14s': '/home/mreschke/.pyenv/shims/i3ctl generate && i3-msg restart',
    })


    # Wallpaper base
    wallpaper_base = set('~/Wallpaper', host, {
        'sunjaro': '~/Pictures/Wallpaper',
        'p53': '~/Pictures/Wallpaper',
    })


    # Current theme (amber, archlinux, manjaro, pink)
    theme = set('manjaro', host, {
        'sunjaro': 'manjaro',
        'p53': 'manjaro',
        'p15': 'amber',
        'p14s': 'manjaro',
    })


    # Extra theme details
    # Wallpaper is an OVERRIDE, else defaults to the themes folder/background.[jpg|png]
    themes = set({
        'amber': {
            'color': '#EF5B1A',
            'archey3': 'yellow',
            #'wallpaper': 'Abstract/cracked_orange.jpg',
            #'wallpaper': 'Manjaro/antelope-canyon-984055.jpg',
            #'wallpaper': 'Scenes/digital_sunset.jpg',
            #'wallpaper': 'LinuxMint/linuxmint-vera/mpiwnicki_red_dusk.jpg',
            #'wallpaper': 'LinuxMint/linuxmint-vanessa/navi_india.jpg',
            #'wallpaper': 'LinuxMint/linuxmint-una/nwatson_eclipse.jpg',
            #'wallpaper': 'LinuxMint/linuxmint-vera/navi_india.jpg',
            #'wallpaper': 'LinuxMint/linuxmint-ulyssa/tangerine_nanpu.jpg',
            #'wallpaper': 'Manjaro/sky-3189347.jpg',
        },
        'archlinux': {
            'color': '#1793D1',
            'archey3': 'blue',
            #'wallpaper': 'Archlinux/349880.jpg',
            'wallpaper': 'De/budgie.jpg',

        },
        'manjaro': {
            'color': '#106E5C',
            'archey3': 'green',
            #'wallpaper': 'Manjaro/illyria-default-lockscreen-nobrand.jpg',
            #'wallpaper': 'Manjaro/wpM_orbit2_textured.jpg'
            'wallpaper': 'De/deepin.jpg',

        },
        'pink': {
            'color': '#b41474',
            'archey3': 'magenta',
            #'wallpaper': 'Abstract/artistic_colors2.jpg',
            #'wallpaper': 'Landscape/backlit-chiemsee-dawn-1363876.jpg',
            #`'wallpaper': 'Manjaro/DigitalMilkyway.png',
            #'wallpaper': 'LinuxMint/linuxmint-una/eeselioglu_istanbul.jpg',
            #'wallpaper': 'Abstract/neon_huawei.jpg',
            #'wallpaper': 'De/budgie.jpg',
            'wallpaper': 'De/deepin.jpg',
        },
    },
        host, {
            #'p15': {'manjaro.wallpaper': 'Manjaro/wpM_orbit2_textured.jpg'}
            #'p53': {'manjaro.wallpaper': 'De/deepin.jpg!!!'}
        }
    )


    # Polybar
    # Specific to the custom qpanel theme made from this https://github.com/adi1090x/polybar-themes
    polybar = set({
        'enabled': True,
        # blocks|colorblocks|cuts|docky|forest|grayblocks|hack|material
        # panels|pwidgets|qpanels|shades|shapes
        'theme': 'qpanels',
        # budgie|deepin|elight|edark|gnomw|klight|kdark
        # liri|mint|ugnome|unity|xubuntu|zorin
        'subtheme': 'deepin'
    }, host, {
        'p14s': {'enabled': False},
    })


    # Rofi
    rofi = set({
        'launcher': f'~/.config/polybar/{polybar.theme}/scripts/launcher.sh --{polybar.subtheme}',
        'powermenu': f'~/.config/polybar/{polybar.theme}/scripts/powermenu.sh --{polybar.subtheme}',
    }, host, {
        'p14s': {'launcher': 'rofi -show drun'}
    })


    # Alacritty
    alacritty = set({
        'font_size': '9.0',
    }, host, {
        'p15': {'font_size': '8.0'}
    })


    # Default font for window titles (not bar.font)
    font = set('xft:URWGothic-Book 9')


    # Task tray
    tasktray = set({
        'enabled': True,
        'position': 'right',
    })


    # i3bar configs
    # All themes may obey these global bar configs, or they may set their own
    bar = set({
        'enabled': False,
        #'cmd': 'i3bar',
        'cmd': 'i3bar --transparency',
        'status_cmd': 'i3status',
        'position': 'bottom',
        'font': 'xft:URWGothic-Book 8',

        # Hide or show the bar
        'mode': 'dock', # dock|hide|invisible
        'hidden_state': 'hide', # hide|show

        # Modifier makes the hidden bar show up while key is pressed
        'modifier': 'none',
        #'modifier': 'Ctrl+$alt',
    },
        desktop != 'i3', {
            'mode': 'hide'
        },
        host, {
            'p15': {'position': 'top'},
            'p14s': {'enabled': True},
        },
    )


    # Applications (not autostarts)
    # Preferred applications, could change depending on DE installed
    apps = set({
        # These are mostly common generic all Desktop Environments and Installed Desktop Tools
        'terminal': 'alacritty',
        'webbrowser': 'firefox',
        'webbrowser2': 'chromium',
        'dmenu': set(path('~/.files/scripts/dmenu-run-blue'),
            theme, {'manjaro': path('~/.files/scripts/dmenu-run-green')
        }),
        'htop': 'htop',
        'bashtop': 'bashtop',
        'codeeditor': 'code',
        'screenlock': 'blurlock',
        'powermanager': 'xfce4-power-manager', # move to autostart
        'powermanagersettings': 'xfce4-power-manager-settings',
        'spotify': 'spotify',
        'networkeditor': 'nm-connection-editor',
    },
        desktop_tools=='kde', {
            #'terminal': 'konsole',
            'filemanager': 'dolphin',
            'calculator': 'kcalc',
            'settings': 'systemsettings',
            'taskmanager': 'ksysguard',
            'screenshot': 'spectacle',
            'colorpicker': 'kcolorchooser',
            'notepad': 'kate',
    },
        desktop_tools=='xfce', {
            #'terminal': 'gnome-terminal',
            'filemanager': 'thunar',
            'calculator': 'galculator', # xcalc
            'settings': 'xfce4-settings-manager',
            'taskmanager': 'xfce4-taskmanager',
            'notepad': 'mousepad',
    },
        desktop_tools=='gnome', {
            'filemanager': 'nautilus', # ???
            'terminal': 'gnome-terminal',
            'calculator': 'gnome-calculator',
    })


    # Autostarts
    #exec --no-startup-id blueman-applet
    #exec_always --no-startup-id sbxkb
    #exec --no-startup-id start_conky_maia
    #exec --no-startup-id start_conky_green
    autostart = set({
        # These only fire up if we are in pure i3 mode (no other desktop environment+i3)
        'session':  set(None, desktop=='i3' and desktop_tools=='xfce', 'exec --no-startup-id xfsettingsd --replace'),
        'locker':   set(None, desktop=='i3', 'exec_always --no-startup-id xss-lock -- blurlock'),
        #'locker':  set(None, desktop=='i3', 'exec_always --no-startup-id xss-lock -- i3lock --nofork --image ' + wallpaper_base + '/De/deepin.jpg'),
        'polkit':   set(None, desktop=='i3', 'exec --no-startup-id /usr/lib/polkit-kde-authentication-agent-1'),
        'screen':   set(None, desktop=='i3', 'exec --no-startup-id ~/.screenlayout/screen-laptop.sh'),
        'powerman': set(None, desktop=='i3', 'exec_always --no-startup-id ' + apps.powermanager),

        # If using polybar in pure i3
        'bar': set(None, desktop=='i3' and polybar.enabled, 'exec_always --no-startup-id ~/.config/polybar/launch.sh --' + polybar.theme),

        # Threse always fire up, regardless of how i3 is used
        'wallpaper': 'exec_always --no-startup-id nitrogen --restore',
        'compositor': 'exec_always --no-startup-id picom --config ~/.config/picom/picom.conf -b',
        'keyboard': 'exec_always --no-startup-id xset r rate 250 50',

        # Theme specific alttab
        'alttab': 'exec_always --no-startup-id "alttab -w 1 -s 1 -bw 0 -fg \'' + themes[theme].color + '\' -bg \'#0E2229\' -frame \'' + themes[theme].color + '\' -t 128x150 -i 127x64"',
    },
        # If tasktray is enabled running in pure i3
        tasktray.enabled and desktop=='i3', {
            'matray':  set(None, os=='manjaro', 'exec --no-startup-id matray'),
            'clipman': set('exec --no-startup-id clipit --daemon'),
            'netman':  set('exec --no-startup-id nm-applet'),
            'volume':  set('exec --no-startup-id volumeicon'),
        },
    )

    # Volume Control
    volume = set({
        'up': 'amixer -D pulse sset Master 5%+',
        'down': 'amixer -D pulse sset Master 5%-',
        'mute': 'amixer -D pulse set Master 1+ toggle',
        #'mixer': apps.terminal + ' -e alsamixer',
        'mixer': 'pavucontrol',
    })

    # Media Control
    media = set({
        'play_pause': 'playerctl play-pause',
        'next': 'playerctl next',
        'previous': 'playerctl previous',
    })

    # Brightness Control
    brightness = set({
        'up': 'brightnessctl -q set 3%+',
        'down': 'brightnessctl --min-val=2 -q set 3%-',
    })


    # Dynamically Load and Instantiate Plugins
    # Pluging must be LAST after all variables are set
    _vars = gather(locals())
    plugins = set({
        'nitrogen': plugin('nitrogen.Nitrogen')(_vars),
        'archey3': plugin('archey3.Archey3')(_vars),
        'polybar': plugin('polybar.Polybar')(_vars),
        'alacritty': plugin('alacritty.Alacritty')(_vars),
    })

    # Return all variables to the ohmyi3 generator for templating
    return gather(locals())




async def before_generate(config):
    """This hook fires before the new i3 config is generated"""

    # Kill some applications, as they don't re-autostart if already running
    util.shell('killall alttab')



async def after_generate(config):
    """This hook fires after the new i3 config is generated"""
    #dump('after hook')

    # REVIEW all these plugins.  They are very specific
    # For example, the polybar theme is specific to
    # https://github.com/adi1090x/polybar-themes style themes only and
    # is currently designed mostly for the "panels" variant.

    # Set themed wallpaper
    #config.plugins.nitrogen.set_wallpaper()

    # Set themed archey in my .zshrc and or .bashrc
    #config.plugins.archey3.set_archey()

    # Modify polybar theme files (template some variables)
    #config.plugins.polybar.adjust_polybar()

    # Template the alacritty config
    #config.plugins.alacritty.template_config()
```


## Example Info Output

All variables defined in your `~/.config/ohmyi3/config.py` will be available as
a nice `SuperDict` to the jinja2 templating engine and used to dynamically control
i3 (and anything else).


Example output from the example `config.py` above on my host named `p15`
```
i3ctl info
```

```python
:: Ohmyi3 User Configuration ::

Dict({
    'host': 'p15',
    'user': 'mreschke',
    'ohmyi3_path': '~/.config/ohmyi3',
    'paths': Dict({
        'ohmyi3': '/home/mreschke/.files/configs/i3',
        'ohmyi3_configd': '/home/mreschke/.files/configs/i3/config.d',
        'ohmyi3_themes': '/home/mreschke/.files/configs/i3/themes',
        'i3': '/home/mreschke/.config/i3',
        'i3status': '/home/mreschke/.config/i3status',
        'alacritty': '/home/mreschke/.files/configs/alacritty',
        'polybar': '/home/mreschke/.files/configs/polybar'
    }),
    'os': 'manjaro',
    'net_interface': 'enp11s0',
    'has_battery': True,
    'battery_device': 'BAT0',
    'backlight_device': 'intel_backlight',
    'desktop': 'i3',
    'desktop_tools': 'kde',
    'i3_gaps': True,
    'i3_restart': '~/.files/scripts/i3ctl-dev generate && i3-msg restart',
    'wallpaper_base': '~/Wallpaper',
    'theme': 'amber',
    'themes': Dict({
        'amber': Dict({'color': '#EF5B1A', 'archey3': 'yellow'}),
        'archlinux': Dict({
            'color': '#1793D1',
            'archey3': 'blue',
            'wallpaper': 'De/budgie.jpg'
        }),
        'manjaro': Dict({
            'color': '#106E5C',
            'archey3': 'green',
            'wallpaper': 'De/deepin.jpg'
        }),
        'pink': Dict({
            'color': '#b41474',
            'archey3': 'magenta',
            'wallpaper': 'De/deepin.jpg'
        })
    }),
    'polybar': Dict({
        'enabled': True,
        'theme': 'qpanels',
        'subtheme': 'deepin'
    }),
    'rofi': Dict({
        'launcher': '~/.config/polybar/qpanels/scripts/launcher.sh --deepin',
        'powermenu': '~/.config/polybar/qpanels/scripts/powermenu.sh --deepin'
    }),
    'alacritty': Dict({'font_size': '8.0'}),
    'font': 'xft:URWGothic-Book 9',
    'tasktray': Dict({'enabled': True, 'position': 'right'}),
    'bar': Dict({
        'enabled': False,
        'cmd': 'i3bar --transparency',
        'status_cmd': 'i3status',
        'position': 'top',
        'font': 'xft:URWGothic-Book 8',
        'mode': 'dock',
        'hidden_state': 'hide',
        'modifier': 'none'
    }),
    'apps': Dict({
        'terminal': 'alacritty',
        'webbrowser': 'firefox',
        'webbrowser2': 'chromium',
        'dmenu': '/home/mreschke/.files/scripts/dmenu-run-blue',
        'htop': 'htop',
        'bashtop': 'bashtop',
        'codeeditor': 'code',
        'screenlock': 'blurlock',
        'powermanager': 'xfce4-power-manager',
        'powermanagersettings': 'xfce4-power-manager-settings',
        'spotify': 'spotify',
        'networkeditor': 'nm-connection-editor',
        'filemanager': 'dolphin',
        'calculator': 'kcalc',
        'settings': 'systemsettings',
        'taskmanager': 'ksysguard',
        'screenshot': 'spectacle',
        'colorpicker': 'kcolorchooser',
        'notepad': 'kate'
    }),
    'autostart': Dict({
        'session': None,
        'locker': 'exec_always --no-startup-id xss-lock -- blurlock',
        'polkit': 'exec --no-startup-id /usr/lib/polkit-kde-authentication-agent-1',
        'screen': 'exec --no-startup-id ~/.screenlayout/screen-laptop.sh',
        'powerman': 'exec_always --no-startup-id xfce4-power-manager',
        'bar': 'exec_always --no-startup-id ~/.config/polybar/launch.sh --qpanels',
        'wallpaper': 'exec_always --no-startup-id nitrogen --restore',
        'compositor': 'exec_always --no-startup-id picom --config ~/.config/picom/picom.conf -b',
        'keyboard': 'exec_always --no-startup-id xset r rate 250 50',
        'alttab':
            "exec_always --no-startup-id \"alttab -w 1 -s 1 -bw 0 -fg '#EF5B1A' -bg '#0E2229' -frame '#EF5B1A' -t 128x150 "
            "-i 127x64\"",
        'matray': 'exec --no-startup-id matray',
        'clipman': 'exec --no-startup-id clipit --daemon',
        'netman': 'exec --no-startup-id nm-applet',
        'volume': 'exec --no-startup-id volumeicon'
    }),
    'volume': Dict({
        'up': 'amixer -D pulse sset Master 5%+',
        'down': 'amixer -D pulse sset Master 5%-',
        'mute': 'amixer -D pulse set Master 1+ toggle',
        'mixer': 'pavucontrol'
    }),
    'media': Dict({
        'play_pause': 'playerctl play-pause',
        'next': 'playerctl next',
        'previous': 'playerctl previous'
    }),
    'brightness': Dict({'up': 'brightnessctl -q set 3%+', 'down': 'brightnessctl --min-val=2 -q set 3%-'}),
    'plugins': Dict({
        'nitrogen': <plugins.nitrogen.nitrogen.Nitrogen object at 0x7f1b2ed359f0>,
        'archey3': <plugins.archey3.archey3.Archey3 object at 0x7f1b2ed35960>,
        'polybar': <plugins.polybar.polybar.Polybar object at 0x7f1b2ed35ae0>,
        'alacritty': <plugins.alacritty.alacritty.Alacritty object at 0x7f1b2ed35930>
    })
})
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/ohmyi3/ohmyi3",
    "name": "ohmyi3",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.9",
    "maintainer_email": null,
    "keywords": null,
    "author": "Matthew Reschke",
    "author_email": "mail@mreschke.com",
    "download_url": "https://files.pythonhosted.org/packages/7d/77/774401a97510153c376d9d925954f1011c304021f38ddda58d4fb1467efd/ohmyi3-0.1.5.tar.gz",
    "platform": null,
    "description": "# Ohmyi3\n\n\nOhmyi3 provides a dynamic template engine for your i3 configs providing variable\nand conditional driven i3 settings.\n\nIdeal for those that use i3 on many of their systems and want to maintain a single\nglobal repository that morphs to each computers environment based on hostname, user\nand any other dynamic variable.\n\n\n## Features\n- Single `~/.config/ohmyi3/config.py` to dynamic variables to i3 configs\n- One set of configs morphs based on your hostname, desktop environment or any variable you care to define.\n- Uses python jinja2 templates to add variables and conditions to your i3 [or any] configs\n- Plugins and hooks allow you to control all aspects of your system from a single config\n    - Not only can you template dynamic i3 configs, but you can also:\n    - Template alacritty, polybar, nitrogen, feh and anything else...its all python and jinja2, limitless\n- Powered by https://github.com/uvicore/framework\n\n\n## Installation\n\n1. Install from Pypi https://pypi.org/project/ohmyi3/ with `pip`\n```\npip install ohmyi3\n```\n\n2. Initialize a fresh ohmyi3 config.  This creates a `~/.config/ohmyi3` and\npopulates it with a good set of defaults you can work with.\n```\ni3ctl init\n```\n\n3. Modify the stock `~/.config/ohmyi3/config.d/*` i3 configs to suit your needs.\nAdd any `*.conf` file you want.  They are all picked up in alphabetical order.\n\n4. The `theme` variable picks the theme from `~/.config/ohmyi3/themes` folder.\nBring your own themes.\n\n4. **NOTICE:** Review and modify stock `~/.config/ohmyi3/config.py` configuration.  This is\njust a stock example.  **DO NOT run it as is.**  You need to tune this to fit your\nsystem.  All of the variables defined in that file will be available as jinja2\nvariables when templating i3 and the rest of your system.\n\n    Pay special attention to the `after_generate` hooks.  You will want to comment\n    those out and use them as needed.  To review the plugin code see the\n    `~/.config/ohmyi3/plugins` directory.  Plugins are very simple system\n    modification scripts.  Please review and write your own to suit your needs.\n\n5. Once you have tuned your variables, you can see the resulting dictionary\n```\ni3ctl info\n```\n\n6. If you like all the variables, and have **used the plugins with caution**\nyou can now run the generator to template `~/.config/ohmyi3/config.d/*` i3 configs\nwhich will output a new i3 file to `~/.config/i3/config` (it WILL save a backup\nto that same folder before it overrides a new file)\n```\ni3ctl generate\n```\n\nExample CLI Output\n```\n:: Generating new i3 config using ohmyi3 ::\n   + Firing user defined before_generate hook\n   * Backing up /home/mreschke/.config/i3/config to /home/mreschke/.config/i3/backup-2023-04-20_17-36-41\n   - Appending /home/mreschke/.files/configs/i3/config.d/00-header.conf\n   - Appending /home/mreschke/.files/configs/i3/config.d/05-system.conf\n   - Appending /home/mreschke/.files/configs/i3/config.d/10-autostart.conf\n   - Appending /home/mreschke/.files/configs/i3/config.d/15-borders.conf\n   - Appending /home/mreschke/.files/configs/i3/config.d/20-navigation.conf\n   - Appending /home/mreschke/.files/configs/i3/config.d/80-applications.conf\n   - Appending /home/mreschke/.files/configs/i3/config.d/85-windows.conf\n   - Appending /home/mreschke/.files/configs/i3/config.d/90-gaps.conf\n   * Appending THEME pink\n   * Copying /home/mreschke/.files/configs/i3/themes/i3status.conf to /home/mreschke/.config/i3status/config\n   + Firing user defined after_generate hook\n   > Plugin Nitrogen: nitrogen --save --set-zoom-fill /home/mreschke/Wallpaper/De/budgie.jpg > /dev/null 2>&1\n   > Plugin Archey3: sed -i 's/archey3.*/archey3 -c magenta/g' ~/.zshrc\n   > Plugin Archey3: sed -i 's/archey3.*/archey3 -c magenta/g' ~/.bashrc\n   > Plugin Polybar: Templating /home/mreschke/.files/configs/polybar/qpanels/panel/deepin.j2.ini\n   > Plugin Alacritty: Templating /home/mreschke/.files/configs/alacritty/alacritty.j2.yml\n\nDone!\nNew /home/mreschke/.config/i3/config generated!\nPlease reload i3!\n```\n\n7. Reload i3\n\n\n\n## Most Basic Example\n\nIf your `~/.config/ohmyi3/config.py` looked like this\n```python\n...\ndef config():\n    host = util.hostname()\n    theme = 'archlinux'\n...\n```\n\nAnd you had only a single file `~/config/ohmyi3/config.d/01-test.conf`\n```jinja\n# My dynamic i3 config\n\nYour hostname is {{ host }}\n\n{% if host == 'sunjaro' %}\nAdd i3 configs specifically for {{ host }}\n{% endif %}\n\nI love the {{ theme }} theme\n```\n\nAfter running `i3ctl generate`, your final `~/.config/i3/config` would look like this\n```\n# My dynamic i3 config\n\nYour hostname is sunjaro\nAdd i3 configs specifically for sunjaro\nI love the archlinux theme\n```\n\n\n\n## Sample the Power\n\n`~/.config/ohmyi3/config.py`\n```python\nimport uvicore\nfrom ohmyi3 import util\nfrom uvicore.typing import Dict\nfrom uvicore.configuration import env\nfrom uvicore.support.dumper import dump, dd\nfrom ohmyi3.util import set, gather, path, plugin\n\n# Ohmyi3 user configuration.\n#\n# This config is what drives the i3ctl generator.\n# All variables inside config() will be available to the jinja2 templating engine\n# and may be used in your config.d/* i3 configs for dynamic conditions.\n# Use the before_generate() and after_generate() hooks to fire off plugins/*\n# to control the rest of your system (set wallpaper, alacritty themes, polybar...)\n# From here on out, the power is in your hands.  Automation is now limitless!\n\ndef config():\n    \"\"\"Ohmyi3 variables for configuring and templating i3\"\"\"\n\n    # Hostname and user from system\n    host = util.hostname()\n    user = util.loggedinuser()\n\n\n    # Paths to all relevant locations\n    # If you need to change the ohmyi3 path, use the\n    # environment variable OHMYI3_PATH (default ~/.config/ohmyi3)\n    ohmyi3_path = uvicore.config('ohmyi3.config_path')\n    paths = set({\n        'ohmyi3': path(ohmyi3_path),\n        'ohmyi3_configd': path([ohmyi3_path, 'config.d']),\n        'ohmyi3_themes': path([ohmyi3_path, 'themes']),\n        'i3': path('~/.config/i3'),\n        'i3status': path('~/.config/i3status'),\n        'alacritty': path('~/.config/alacritty'),\n        'polybar': path('~/.config/polybar'),\n    })\n\n    # Unix OS Variant\n    os = set('manjaro', host, {\n        'p14s': 'lmde',\n    })\n\n\n    # Main network interface\n    net_interface = set('enp11s0', host, {\n        'p15': 'enp11s0',\n        'p53': 'wlp0s20f3',\n        'deajaro': 'wlp2s0',\n    })\n\n\n    # Has battery (laptop?)\n    has_battery = set(True, host, {\n        'sunjaro': False,\n        'p53': True,\n        'p15': True,\n        'p14s': True,\n    })\n    battery_device = set('BAT0')\n\n\n    # Backlinght\n    backlight_device = set('intel_backlight')\n\n\n    # Desktop Environment (kde, xfce, i3, cinnamon, mate, gnome)\n    # I like to run i3 inside kde and xfce etc...  If runing under these DE's\n    # I need to tweak the configs (no screen lock, different autostarts etc...)\n    desktop = set('i3', host, {\n        'sunjaro': 'kde',\n        'p53': 'i3',\n        'p15': 'i3',\n        #'p14s': 'cinnamon',\n    })\n\n\n    # Main desktop tools (kde, xfce...)\n    # Not the same as desktop, which is the running Desktop Environment\n    desktop_tools = set('kde', host, {\n        'deajaro': 'xfce'\n    })\n\n\n    # Using i3 capable of gaps\n    i3_gaps = set(True, host, {\n        'p14s': False\n    })\n\n\n    # Restart i3 command\n    i3_restart = set('~/.files/scripts/i3ctl-dev generate && i3-msg restart', host, {\n        'deajaro': 'i3ctl generate && i3-msg restart',\n        'p14s': '/home/mreschke/.pyenv/shims/i3ctl generate && i3-msg restart',\n    })\n\n\n    # Wallpaper base\n    wallpaper_base = set('~/Wallpaper', host, {\n        'sunjaro': '~/Pictures/Wallpaper',\n        'p53': '~/Pictures/Wallpaper',\n    })\n\n\n    # Current theme (amber, archlinux, manjaro, pink)\n    theme = set('manjaro', host, {\n        'sunjaro': 'manjaro',\n        'p53': 'manjaro',\n        'p15': 'amber',\n        'p14s': 'manjaro',\n    })\n\n\n    # Extra theme details\n    # Wallpaper is an OVERRIDE, else defaults to the themes folder/background.[jpg|png]\n    themes = set({\n        'amber': {\n            'color': '#EF5B1A',\n            'archey3': 'yellow',\n            #'wallpaper': 'Abstract/cracked_orange.jpg',\n            #'wallpaper': 'Manjaro/antelope-canyon-984055.jpg',\n            #'wallpaper': 'Scenes/digital_sunset.jpg',\n            #'wallpaper': 'LinuxMint/linuxmint-vera/mpiwnicki_red_dusk.jpg',\n            #'wallpaper': 'LinuxMint/linuxmint-vanessa/navi_india.jpg',\n            #'wallpaper': 'LinuxMint/linuxmint-una/nwatson_eclipse.jpg',\n            #'wallpaper': 'LinuxMint/linuxmint-vera/navi_india.jpg',\n            #'wallpaper': 'LinuxMint/linuxmint-ulyssa/tangerine_nanpu.jpg',\n            #'wallpaper': 'Manjaro/sky-3189347.jpg',\n        },\n        'archlinux': {\n            'color': '#1793D1',\n            'archey3': 'blue',\n            #'wallpaper': 'Archlinux/349880.jpg',\n            'wallpaper': 'De/budgie.jpg',\n\n        },\n        'manjaro': {\n            'color': '#106E5C',\n            'archey3': 'green',\n            #'wallpaper': 'Manjaro/illyria-default-lockscreen-nobrand.jpg',\n            #'wallpaper': 'Manjaro/wpM_orbit2_textured.jpg'\n            'wallpaper': 'De/deepin.jpg',\n\n        },\n        'pink': {\n            'color': '#b41474',\n            'archey3': 'magenta',\n            #'wallpaper': 'Abstract/artistic_colors2.jpg',\n            #'wallpaper': 'Landscape/backlit-chiemsee-dawn-1363876.jpg',\n            #`'wallpaper': 'Manjaro/DigitalMilkyway.png',\n            #'wallpaper': 'LinuxMint/linuxmint-una/eeselioglu_istanbul.jpg',\n            #'wallpaper': 'Abstract/neon_huawei.jpg',\n            #'wallpaper': 'De/budgie.jpg',\n            'wallpaper': 'De/deepin.jpg',\n        },\n    },\n        host, {\n            #'p15': {'manjaro.wallpaper': 'Manjaro/wpM_orbit2_textured.jpg'}\n            #'p53': {'manjaro.wallpaper': 'De/deepin.jpg!!!'}\n        }\n    )\n\n\n    # Polybar\n    # Specific to the custom qpanel theme made from this https://github.com/adi1090x/polybar-themes\n    polybar = set({\n        'enabled': True,\n        # blocks|colorblocks|cuts|docky|forest|grayblocks|hack|material\n        # panels|pwidgets|qpanels|shades|shapes\n        'theme': 'qpanels',\n        # budgie|deepin|elight|edark|gnomw|klight|kdark\n        # liri|mint|ugnome|unity|xubuntu|zorin\n        'subtheme': 'deepin'\n    }, host, {\n        'p14s': {'enabled': False},\n    })\n\n\n    # Rofi\n    rofi = set({\n        'launcher': f'~/.config/polybar/{polybar.theme}/scripts/launcher.sh --{polybar.subtheme}',\n        'powermenu': f'~/.config/polybar/{polybar.theme}/scripts/powermenu.sh --{polybar.subtheme}',\n    }, host, {\n        'p14s': {'launcher': 'rofi -show drun'}\n    })\n\n\n    # Alacritty\n    alacritty = set({\n        'font_size': '9.0',\n    }, host, {\n        'p15': {'font_size': '8.0'}\n    })\n\n\n    # Default font for window titles (not bar.font)\n    font = set('xft:URWGothic-Book 9')\n\n\n    # Task tray\n    tasktray = set({\n        'enabled': True,\n        'position': 'right',\n    })\n\n\n    # i3bar configs\n    # All themes may obey these global bar configs, or they may set their own\n    bar = set({\n        'enabled': False,\n        #'cmd': 'i3bar',\n        'cmd': 'i3bar --transparency',\n        'status_cmd': 'i3status',\n        'position': 'bottom',\n        'font': 'xft:URWGothic-Book 8',\n\n        # Hide or show the bar\n        'mode': 'dock', # dock|hide|invisible\n        'hidden_state': 'hide', # hide|show\n\n        # Modifier makes the hidden bar show up while key is pressed\n        'modifier': 'none',\n        #'modifier': 'Ctrl+$alt',\n    },\n        desktop != 'i3', {\n            'mode': 'hide'\n        },\n        host, {\n            'p15': {'position': 'top'},\n            'p14s': {'enabled': True},\n        },\n    )\n\n\n    # Applications (not autostarts)\n    # Preferred applications, could change depending on DE installed\n    apps = set({\n        # These are mostly common generic all Desktop Environments and Installed Desktop Tools\n        'terminal': 'alacritty',\n        'webbrowser': 'firefox',\n        'webbrowser2': 'chromium',\n        'dmenu': set(path('~/.files/scripts/dmenu-run-blue'),\n            theme, {'manjaro': path('~/.files/scripts/dmenu-run-green')\n        }),\n        'htop': 'htop',\n        'bashtop': 'bashtop',\n        'codeeditor': 'code',\n        'screenlock': 'blurlock',\n        'powermanager': 'xfce4-power-manager', # move to autostart\n        'powermanagersettings': 'xfce4-power-manager-settings',\n        'spotify': 'spotify',\n        'networkeditor': 'nm-connection-editor',\n    },\n        desktop_tools=='kde', {\n            #'terminal': 'konsole',\n            'filemanager': 'dolphin',\n            'calculator': 'kcalc',\n            'settings': 'systemsettings',\n            'taskmanager': 'ksysguard',\n            'screenshot': 'spectacle',\n            'colorpicker': 'kcolorchooser',\n            'notepad': 'kate',\n    },\n        desktop_tools=='xfce', {\n            #'terminal': 'gnome-terminal',\n            'filemanager': 'thunar',\n            'calculator': 'galculator', # xcalc\n            'settings': 'xfce4-settings-manager',\n            'taskmanager': 'xfce4-taskmanager',\n            'notepad': 'mousepad',\n    },\n        desktop_tools=='gnome', {\n            'filemanager': 'nautilus', # ???\n            'terminal': 'gnome-terminal',\n            'calculator': 'gnome-calculator',\n    })\n\n\n    # Autostarts\n    #exec --no-startup-id blueman-applet\n    #exec_always --no-startup-id sbxkb\n    #exec --no-startup-id start_conky_maia\n    #exec --no-startup-id start_conky_green\n    autostart = set({\n        # These only fire up if we are in pure i3 mode (no other desktop environment+i3)\n        'session':  set(None, desktop=='i3' and desktop_tools=='xfce', 'exec --no-startup-id xfsettingsd --replace'),\n        'locker':   set(None, desktop=='i3', 'exec_always --no-startup-id xss-lock -- blurlock'),\n        #'locker':  set(None, desktop=='i3', 'exec_always --no-startup-id xss-lock -- i3lock --nofork --image ' + wallpaper_base + '/De/deepin.jpg'),\n        'polkit':   set(None, desktop=='i3', 'exec --no-startup-id /usr/lib/polkit-kde-authentication-agent-1'),\n        'screen':   set(None, desktop=='i3', 'exec --no-startup-id ~/.screenlayout/screen-laptop.sh'),\n        'powerman': set(None, desktop=='i3', 'exec_always --no-startup-id ' + apps.powermanager),\n\n        # If using polybar in pure i3\n        'bar': set(None, desktop=='i3' and polybar.enabled, 'exec_always --no-startup-id ~/.config/polybar/launch.sh --' + polybar.theme),\n\n        # Threse always fire up, regardless of how i3 is used\n        'wallpaper': 'exec_always --no-startup-id nitrogen --restore',\n        'compositor': 'exec_always --no-startup-id picom --config ~/.config/picom/picom.conf -b',\n        'keyboard': 'exec_always --no-startup-id xset r rate 250 50',\n\n        # Theme specific alttab\n        'alttab': 'exec_always --no-startup-id \"alttab -w 1 -s 1 -bw 0 -fg \\'' + themes[theme].color + '\\' -bg \\'#0E2229\\' -frame \\'' + themes[theme].color + '\\' -t 128x150 -i 127x64\"',\n    },\n        # If tasktray is enabled running in pure i3\n        tasktray.enabled and desktop=='i3', {\n            'matray':  set(None, os=='manjaro', 'exec --no-startup-id matray'),\n            'clipman': set('exec --no-startup-id clipit --daemon'),\n            'netman':  set('exec --no-startup-id nm-applet'),\n            'volume':  set('exec --no-startup-id volumeicon'),\n        },\n    )\n\n    # Volume Control\n    volume = set({\n        'up': 'amixer -D pulse sset Master 5%+',\n        'down': 'amixer -D pulse sset Master 5%-',\n        'mute': 'amixer -D pulse set Master 1+ toggle',\n        #'mixer': apps.terminal + ' -e alsamixer',\n        'mixer': 'pavucontrol',\n    })\n\n    # Media Control\n    media = set({\n        'play_pause': 'playerctl play-pause',\n        'next': 'playerctl next',\n        'previous': 'playerctl previous',\n    })\n\n    # Brightness Control\n    brightness = set({\n        'up': 'brightnessctl -q set 3%+',\n        'down': 'brightnessctl --min-val=2 -q set 3%-',\n    })\n\n\n    # Dynamically Load and Instantiate Plugins\n    # Pluging must be LAST after all variables are set\n    _vars = gather(locals())\n    plugins = set({\n        'nitrogen': plugin('nitrogen.Nitrogen')(_vars),\n        'archey3': plugin('archey3.Archey3')(_vars),\n        'polybar': plugin('polybar.Polybar')(_vars),\n        'alacritty': plugin('alacritty.Alacritty')(_vars),\n    })\n\n    # Return all variables to the ohmyi3 generator for templating\n    return gather(locals())\n\n\n\n\nasync def before_generate(config):\n    \"\"\"This hook fires before the new i3 config is generated\"\"\"\n\n    # Kill some applications, as they don't re-autostart if already running\n    util.shell('killall alttab')\n\n\n\nasync def after_generate(config):\n    \"\"\"This hook fires after the new i3 config is generated\"\"\"\n    #dump('after hook')\n\n    # REVIEW all these plugins.  They are very specific\n    # For example, the polybar theme is specific to\n    # https://github.com/adi1090x/polybar-themes style themes only and\n    # is currently designed mostly for the \"panels\" variant.\n\n    # Set themed wallpaper\n    #config.plugins.nitrogen.set_wallpaper()\n\n    # Set themed archey in my .zshrc and or .bashrc\n    #config.plugins.archey3.set_archey()\n\n    # Modify polybar theme files (template some variables)\n    #config.plugins.polybar.adjust_polybar()\n\n    # Template the alacritty config\n    #config.plugins.alacritty.template_config()\n```\n\n\n## Example Info Output\n\nAll variables defined in your `~/.config/ohmyi3/config.py` will be available as\na nice `SuperDict` to the jinja2 templating engine and used to dynamically control\ni3 (and anything else).\n\n\nExample output from the example `config.py` above on my host named `p15`\n```\ni3ctl info\n```\n\n```python\n:: Ohmyi3 User Configuration ::\n\nDict({\n    'host': 'p15',\n    'user': 'mreschke',\n    'ohmyi3_path': '~/.config/ohmyi3',\n    'paths': Dict({\n        'ohmyi3': '/home/mreschke/.files/configs/i3',\n        'ohmyi3_configd': '/home/mreschke/.files/configs/i3/config.d',\n        'ohmyi3_themes': '/home/mreschke/.files/configs/i3/themes',\n        'i3': '/home/mreschke/.config/i3',\n        'i3status': '/home/mreschke/.config/i3status',\n        'alacritty': '/home/mreschke/.files/configs/alacritty',\n        'polybar': '/home/mreschke/.files/configs/polybar'\n    }),\n    'os': 'manjaro',\n    'net_interface': 'enp11s0',\n    'has_battery': True,\n    'battery_device': 'BAT0',\n    'backlight_device': 'intel_backlight',\n    'desktop': 'i3',\n    'desktop_tools': 'kde',\n    'i3_gaps': True,\n    'i3_restart': '~/.files/scripts/i3ctl-dev generate && i3-msg restart',\n    'wallpaper_base': '~/Wallpaper',\n    'theme': 'amber',\n    'themes': Dict({\n        'amber': Dict({'color': '#EF5B1A', 'archey3': 'yellow'}),\n        'archlinux': Dict({\n            'color': '#1793D1',\n            'archey3': 'blue',\n            'wallpaper': 'De/budgie.jpg'\n        }),\n        'manjaro': Dict({\n            'color': '#106E5C',\n            'archey3': 'green',\n            'wallpaper': 'De/deepin.jpg'\n        }),\n        'pink': Dict({\n            'color': '#b41474',\n            'archey3': 'magenta',\n            'wallpaper': 'De/deepin.jpg'\n        })\n    }),\n    'polybar': Dict({\n        'enabled': True,\n        'theme': 'qpanels',\n        'subtheme': 'deepin'\n    }),\n    'rofi': Dict({\n        'launcher': '~/.config/polybar/qpanels/scripts/launcher.sh --deepin',\n        'powermenu': '~/.config/polybar/qpanels/scripts/powermenu.sh --deepin'\n    }),\n    'alacritty': Dict({'font_size': '8.0'}),\n    'font': 'xft:URWGothic-Book 9',\n    'tasktray': Dict({'enabled': True, 'position': 'right'}),\n    'bar': Dict({\n        'enabled': False,\n        'cmd': 'i3bar --transparency',\n        'status_cmd': 'i3status',\n        'position': 'top',\n        'font': 'xft:URWGothic-Book 8',\n        'mode': 'dock',\n        'hidden_state': 'hide',\n        'modifier': 'none'\n    }),\n    'apps': Dict({\n        'terminal': 'alacritty',\n        'webbrowser': 'firefox',\n        'webbrowser2': 'chromium',\n        'dmenu': '/home/mreschke/.files/scripts/dmenu-run-blue',\n        'htop': 'htop',\n        'bashtop': 'bashtop',\n        'codeeditor': 'code',\n        'screenlock': 'blurlock',\n        'powermanager': 'xfce4-power-manager',\n        'powermanagersettings': 'xfce4-power-manager-settings',\n        'spotify': 'spotify',\n        'networkeditor': 'nm-connection-editor',\n        'filemanager': 'dolphin',\n        'calculator': 'kcalc',\n        'settings': 'systemsettings',\n        'taskmanager': 'ksysguard',\n        'screenshot': 'spectacle',\n        'colorpicker': 'kcolorchooser',\n        'notepad': 'kate'\n    }),\n    'autostart': Dict({\n        'session': None,\n        'locker': 'exec_always --no-startup-id xss-lock -- blurlock',\n        'polkit': 'exec --no-startup-id /usr/lib/polkit-kde-authentication-agent-1',\n        'screen': 'exec --no-startup-id ~/.screenlayout/screen-laptop.sh',\n        'powerman': 'exec_always --no-startup-id xfce4-power-manager',\n        'bar': 'exec_always --no-startup-id ~/.config/polybar/launch.sh --qpanels',\n        'wallpaper': 'exec_always --no-startup-id nitrogen --restore',\n        'compositor': 'exec_always --no-startup-id picom --config ~/.config/picom/picom.conf -b',\n        'keyboard': 'exec_always --no-startup-id xset r rate 250 50',\n        'alttab':\n            \"exec_always --no-startup-id \\\"alttab -w 1 -s 1 -bw 0 -fg '#EF5B1A' -bg '#0E2229' -frame '#EF5B1A' -t 128x150 \"\n            \"-i 127x64\\\"\",\n        'matray': 'exec --no-startup-id matray',\n        'clipman': 'exec --no-startup-id clipit --daemon',\n        'netman': 'exec --no-startup-id nm-applet',\n        'volume': 'exec --no-startup-id volumeicon'\n    }),\n    'volume': Dict({\n        'up': 'amixer -D pulse sset Master 5%+',\n        'down': 'amixer -D pulse sset Master 5%-',\n        'mute': 'amixer -D pulse set Master 1+ toggle',\n        'mixer': 'pavucontrol'\n    }),\n    'media': Dict({\n        'play_pause': 'playerctl play-pause',\n        'next': 'playerctl next',\n        'previous': 'playerctl previous'\n    }),\n    'brightness': Dict({'up': 'brightnessctl -q set 3%+', 'down': 'brightnessctl --min-val=2 -q set 3%-'}),\n    'plugins': Dict({\n        'nitrogen': <plugins.nitrogen.nitrogen.Nitrogen object at 0x7f1b2ed359f0>,\n        'archey3': <plugins.archey3.archey3.Archey3 object at 0x7f1b2ed35960>,\n        'polybar': <plugins.polybar.polybar.Polybar object at 0x7f1b2ed35ae0>,\n        'alacritty': <plugins.alacritty.alacritty.Alacritty object at 0x7f1b2ed35930>\n    })\n})\n```\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Dynamic i3 Configuration Manager ",
    "version": "0.1.5",
    "project_urls": {
        "Documentation": "https://github.com/ohmyi3/ohmyi3",
        "Homepage": "https://github.com/ohmyi3/ohmyi3",
        "Repository": "https://github.com/ohmyi3/ohmyi3"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f29e407bf0bff5e58335eed68237a33c9f575cc5209e925a402dfff1cb66ab20",
                "md5": "b673f96061a4e7d50697848429e45679",
                "sha256": "a90e6095ae1d38c852cb9f882b2b2cb320c5ce41d44a22866daa44e62ba86dbe"
            },
            "downloads": -1,
            "filename": "ohmyi3-0.1.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "b673f96061a4e7d50697848429e45679",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.9",
            "size": 1155814,
            "upload_time": "2024-07-09T03:27:40",
            "upload_time_iso_8601": "2024-07-09T03:27:40.351902Z",
            "url": "https://files.pythonhosted.org/packages/f2/9e/407bf0bff5e58335eed68237a33c9f575cc5209e925a402dfff1cb66ab20/ohmyi3-0.1.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7d77774401a97510153c376d9d925954f1011c304021f38ddda58d4fb1467efd",
                "md5": "673ca46e6a964ec151458e88a3867a32",
                "sha256": "2a88c8d52b4addd379e994dd13a84c815282a627e52c1b484c61c9836f690ba2"
            },
            "downloads": -1,
            "filename": "ohmyi3-0.1.5.tar.gz",
            "has_sig": false,
            "md5_digest": "673ca46e6a964ec151458e88a3867a32",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.9",
            "size": 1153815,
            "upload_time": "2024-07-09T03:27:43",
            "upload_time_iso_8601": "2024-07-09T03:27:43.558726Z",
            "url": "https://files.pythonhosted.org/packages/7d/77/774401a97510153c376d9d925954f1011c304021f38ddda58d4fb1467efd/ohmyi3-0.1.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-07-09 03:27:43",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ohmyi3",
    "github_project": "ohmyi3",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "ohmyi3"
}
        
Elapsed time: 0.31563s