first upload

This commit is contained in:
Luxferre
2026-06-02 17:42:56 +03:00
commit ebdbc88034
10 changed files with 955 additions and 0 deletions
+89
View File
@@ -0,0 +1,89 @@
# .roidrc: a compact, single-file Bash shell environment tweaker
# for rooted Void Linux environments like Roid or Voideck
# Only include in the interactive sessions, e.g. for bash:
# [[ $- == *i* ]] && . $HOME/.roidrc
# Core deps: less, nano (8.x+), sed, ed, rlwrap, curl, openssh, dtach
# Created by Luxferre in 2026, released into public domain
# override the editor (needs Nano 8 and up) and pager
export EDITOR='nano -FEDSMAGic/max%_T2'
export PAGER='less -RXF'
alias nn="$EDITOR"
alias pg="$PAGER"
# edit and/or live-reload this very file
alias reload-rc=". $BASH_SOURCE"
alias edit-rc="$EDITOR $BASH_SOURCE && . $BASH_SOURCE"
# get the most recent command run on this shell
alias lastcmd='history | tail -q -n 2 | head -q -n 1 | sed "s/^[[:space:]]*[0-9]*[[:space:]]*//"'
# custom alias management framework (defalias/toalias/savealias)
alias defalias='___(){ __="$1";shift;alias $__="_$__(){ $*; };_$__";unset __; };___'
defalias toalias 'defalias "$1" "$(lastcmd)";alias "$1"'
defalias savealias "[ -n \"\$1\" ] && echo \"alias \$(alias \$1 | sed 's/^alias //')\" >> $BASH_SOURCE"
# most important aliases
alias rw='rlwrap -R'
alias ee='rlwrap -R ed -p:'
alias eer='sudo rlwrap -R ed -p:'
defalias l 'ls -lahF --time-style=long-iso --color=always $* | less -RXF'
defalias sshed 'f="$(mktemp)";scp $1 $f && $EDITOR $f && scp $f $1 && rm -f $f && unset f'
alias dl='curl -sSLO'
# less important aliases
alias n='echo -e "$(date -Im)\t$*" >> ~/n'
defalias r13 'echo "$*" | tr "A-Za-z" "N-ZA-Mn-za-m"'
alias websrv='python3 -m http.server'
alias gcm='git commit -a -m'
alias gp='git push origin'
alias gpm='git push origin master'
alias jpm-build='jpm clean && jpm build --build-type=release --ldflags="-s"'
alias jpm-build-static='jpm clean && jpm build --build-type=release --ldflags="-s" --janet-cflags="-static"'
# Void-specific aliases
alias pkgadd='xbps-install -Sy'
alias pkgdel='xbps-remove -oy'
alias pkgsearch='xbps-query -Rs'
alias sysup='xbps-install -Suy && vkpurge rm all && xbps-remove -OOoy'
alias sysclean='vkpurge rm all && xbps-remove -OOoy'
# Roid-specific aliases
alias tmhome='cd $TERMUX_HOME'
alias gui='exec termux-x11 :0 -xstartup "dbus-launch --exit-with-session i3"'
# OpenSSL-based vault helper
ovault() {
local pw="$4"
local op='-d'
[ "$1" = 'e' ] && op='-e'
if [ -z "$pw" ]; then
read -rs -p 'Enter vault password: ' pw
fi
openssl aes-256-cbc $op -pbkdf2 -iter 100000 -pass pass:"$pw" -in "$2" -out "$3"
}
# dmux, a simple dtach based terminal session manager, as a Bash function
dmux() {
local SDIR="$HOME/.dtsess" SPFILE="$SDIR/.list" sname
local -a MENU
mkdir -p "$SDIR"
touch "$SPFILE"
mapfile -t MENU < "$SPFILE"
if [[ -z "$(ls -1 "$SDIR")" ]]; then
for sname in "${MENU[@]}"; do
dtach -n "$SDIR/$sname" $SHELL
done
fi
PS3='Select a session: '
while true; do
select sname in "${MENU[@]}" New Quit; do break; done
[[ "$sname" = 'Quit' ]] && printf '\033[0m' && break
[[ "$sname" = 'New' ]] && read -r -p 'New session name: ' sname
[[ -n "$sname" ]] && printf '\033[0m' && dtach -A "$SDIR/$sname" $SHELL
ls -1 "$SDIR" > "$SPFILE"
mapfile -t MENU < "$SPFILE"
done
}
# ...custom saved aliases will go here
+78
View File
@@ -0,0 +1,78 @@
# Roid: an easy Void Linux installation toolkit for Termux environments on top of Android OS
The Roid toolkit allows you to turn any Android device that can run Termux (and Termux-X11, if you need a GUI desktop) into a full-featured [Void Linux](https://voidlinux.org/) PC.
Only tested on ARM64. Other hardware platforms may or may not work.
## Features
* Full (glibc-based) Void Linux installation for your smartphone/tablet architecture (usually ARM64)
* Convenient shell aliases inside the environment (see [.roidrc](.roidrc))
* Sound support out of the box (via PulseAudio)
* A set of development tools out of the box (GCC, Make, Autotools, Perl, Tcl, Python, Janet, S-Lang, Lua, Expect etc)
* (Opt-out) 3D-accelerated X11 GUI desktop environment (i3, st-sx, Fira Code, Noto Fonts etc)
## Prerequisites
* Android 8 or later.
* [Termux](https://termux.dev/en/) installed and prepared with `termux-change-repo` and `termux-setup-storage`. It's also strongly recommended to select "Acquire wakelock" in the notification bar before starting the installation.
* [Termux-X11](https://github.com/termux/termux-x11) installed from GH releases in case you need a GUI desktop. **Note**: not all Android flavors are supported by Termux-X11.
* Git installed within Termux itself: `pkg updrade -y && pkg install -y git`
## Installation
Run from within the Termux shell:
```sh
git clone --depth 1 https://codeberg.org/luxferre/roid.git ~/roid
sh ~/roid/install
```
In case you don't need a GUI desktop, run `NOX=y sh ~/roid/install` instead.
After the process completes, you need to fully exit the Termux shell and re-enter it before you can start Void.
## CLI usage
From the Termux environment, just type `void` to enter the Void Linux shell. You're ready to go. Your original Termux home path is available in the `$TERMUX_HOME` environment variable.
Alternatively, if you don't want to enter the shell but just run a command inside Void Linux and then return to Termux, type `voidrun [command]` instead.
## Desktop GUI usage (requires Termux-X11)
1. Open Termux-X11 in the background.
2. Switch to Termux (make sure the wakelock is on!) and type `void` to enter the shell.
3. Type `gui` to start the desktop environment.
4. Switch to Termux-X11 to start using the environment.
Having at least an external keyboard connected to your device is highly recommended for better desktop experience.
After exiting the Void Linux shell and before exiting Termux, it's advisable to run the `roidclean` command to stop the PulseAudio and 3D acceleration servers.
## Uninstallation
To fully uninstall Void Linux set up by Roid, exit the Void shell and then run either this:
```
roidclean
pd remove void-glibc-full
sed -i '/ROID_INST/d' ~/.profile
sed -i '/ROID_INST/d' ~/.bashrc
pkg remove -y proot-distro pulseaudio x11-repo termux-x11-nightly virglrenderer-android
pkg autoremove -y
exit
```
or this (if you still have the original `~/roid` directory in place):
```
sh ~/roid/uninstall
rm -rf ~/roid
exit
```
Upon re-entering the Termux shell, no traces of the installation should be found.
## Credits
Created by Luxferre in 2026, released into the public domain with no warranties.
+436
View File
@@ -0,0 +1,436 @@
# See dunst(5) for all configuration options
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = mouse
### Geometry ###
# dynamic width from 0 to 300
# width = (0, 300)
# constant width of 300
width = (300, 300)
# The maximum height of a single notification, excluding the frame.
height = (0, 300)
# Position the notification in the top right corner
origin = top-right
# Offset from the origin
offset = (10, 50)
# Scale factor. It is auto-detected if value is 0.
scale = 0
# Maximum number of notification (0 means no limit)
notification_limit = 0
### Progress bar ###
# Turn on the progess bar. It appears when a progress hint is passed with
# for example dunstify -h int:value:12
progress_bar = true
# Set the progress bar height. This includes the frame, so make sure
# it's at least twice as big as the frame width.
progress_bar_height = 10
# Set the frame width of the progress bar
progress_bar_frame_width = 1
# Set the minimum width for the progress bar
progress_bar_min_width = 150
# Set the maximum width for the progress bar
progress_bar_max_width = 300
# Show how many messages are currently hidden (because of
# notification_limit).
indicate_hidden = yes
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
transparency = 15
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
separator_height = 1
# Padding between text and separator.
padding = 8
# Horizontal padding.
horizontal_padding = 10
# Padding between text and icon.
text_icon_padding = 0
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 0
# Defines color of the frame around the notification window.
frame_color = "#282a36"
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort messages by urgency.
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
idle_threshold = 120
### Text ###
font = Fira Code 10
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://developer.gnome.org/pango/stable/pango-Markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# %n progress value if set without any extra characters
# %% Literal %
# Markup is allowed
format = "%s %p\n%b"
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# Vertical alignment of message text and icon.
# Possible values are "top", "center" and "bottom".
vertical_alignment = center
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Stack together notifications with the same content
stack_duplicates = true
# Hide the count of stacked notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
### Icons ###
# Align icons left/right/off
icon_position = left
# Scale small icons up to this size, set to 0 to disable. Helpful
# for e.g. small files or high-dpi screens. In case of conflict,
# max_icon_size takes precedence over this.
min_icon_size = 0
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 64
# Paths to default icons.
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path.
dmenu = /usr/bin/dmenu -p dunst:
# Browser for opening urls in context menu.
browser = /usr/bin/firefox -new-tab
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst
title = Dunst
# Define the class of the windows spawned by dunst
class = Dunst
# Define the corner radius of the notification window
# in pixel size. If the radius is 0, you have no rounded
# corners.
# The radius will be automatically lowered if it exceeds half of the
# notification height to avoid clipping text and/or icons.
corner_radius = 0
# Ignore the dbus closeNotification message.
# Useful to enforce the timeout set by dunst configuration. Without this
# parameter, an application may close the notification sent before the
# user defined timeout.
ignore_dbusclose = false
### Wayland ###
# These settings are Wayland-specific. They have no effect when using X11
# Uncomment this if you want to let notications appear under fullscreen
# applications (default: overlay)
# layer = top
# Set this to true to use X11 output on Wayland.
force_xwayland = false
### Legacy
# Use the Xinerama extension instead of RandR for multi-monitor support.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
### mouse
# Defines list of actions for each mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: Invoke the action determined by the action_name rule. If there is no
# such action, open the context menu.
# * open_url: If the notification has exactly one url, open it. If there are multiple
# ones, open the context menu.
# * close_current: Close current notification.
# * close_all: Close all notifications.
# * context: Open context menu for the notification.
# * context_all: Open context menu for all notifications.
# These values can be strung together for each mouse event, and
# will be executed in sequence.
mouse_left_click = close_current
mouse_middle_click = do_action, close_current
mouse_right_click = close_all
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "#282a36"
foreground = "#6272a4"
timeout = 10
# Icon for notifications with low urgency, uncomment to enable
#new_icon = /path/to/icon
[urgency_normal]
background = "#282a36"
foreground = "#bd93f9"
timeout = 10
# Icon for notifications with normal urgency, uncomment to enable
#new_icon = /path/to/icon
[urgency_critical]
background = "#ff5555"
foreground = "#f8f8f2"
frame_color = "#ff5555"
timeout = 0
# Icon for notifications with critical urgency, uncomment to enable
#new_icon = /path/to/icon
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# set_category
# timeout
# urgency
# skip_display
# history_ignore
# action_name
# word_wrap
# ellipsize
# alignment
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# skip_display = true
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg
Executable
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
setxkbmap -option "grp:caps_toggle,grp_led:scroll,terminate:ctrl_alt_bksp" -layout "us,ua,ru" -variant "altgr-weur,phonetic,phonetic_mac"
picom --backend xrender -b
feh --bg-fill ~/.config/i3/wallpaper.png &
dunst &
# fcitx5 -d
sleep 1
volumeicon &
+191
View File
@@ -0,0 +1,191 @@
# i3 config file (v4)
#
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
set $mod Mod4
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:Fira Code 12
# Start XDG autostart .desktop files using dex. See also
# https://wiki.archlinux.org/index.php/XDG_Autostart
exec --no-startup-id dex --autostart --environment i3 &
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
# they are included here as an example. Modify as you see fit.
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
# screen before suspend. Use loginctl lock-session to lock your screen.
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork -i $HOME/.config/i3/wallpaper.png &
# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# move tiling windows via drag & drop by left-clicking into the title bar,
# or left-clicking anywhere into the window while holding the floating modifier.
tiling_drag modifier titlebar
# start a terminal
bindsym $mod+Return exec i3-sensible-terminal
# kill focused window
bindsym $mod+Shift+q kill
# A more modern dmenu replacement is rofi:
bindsym $mod+space exec "rofi -modi drun,run -show drun"
# change focus
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+semicolon focus right
# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# move focused window
bindsym $mod+Shift+j move left
bindsym $mod+Shift+k move down
bindsym $mod+Shift+i move up
bindsym $mod+Shift+semicolon move right
# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# split in horizontal orientation
bindsym $mod+h split h
# split in vertical orientation
bindsym $mod+v split v
# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# change focus between tiling / floating windows
bindsym $mod+Control+space focus mode_toggle
# focus the parent container
bindsym $mod+a focus parent
# focus the child container
#bindsym $mod+d focus child
# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws1 "1"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
# switch to workspace
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+0 workspace number $ws10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10
# reload the configuration file
bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
# resize window (you can also use the mouse for that)
mode "resize" {
# These bindings trigger as soon as you enter the resize mode
# Pressing left will shrink the windows width.
# Pressing right will grow the windows width.
# Pressing up will shrink the windows height.
# Pressing down will grow the windows height.
bindsym j resize shrink width 10 px or 10 ppt
bindsym k resize grow height 10 px or 10 ppt
bindsym l resize shrink height 10 px or 10 ppt
bindsym semicolon resize grow width 10 px or 10 ppt
# same bindings, but for the arrow keys
bindsym Left resize shrink width 10 px or 10 ppt
bindsym Down resize grow height 10 px or 10 ppt
bindsym Up resize shrink height 10 px or 10 ppt
bindsym Right resize grow width 10 px or 10 ppt
# back to normal: Enter or Escape or $mod+r
bindsym Return mode "default"
bindsym Escape mode "default"
bindsym $mod+r mode "default"
}
bindsym $mod+r mode "resize"
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
status_command bash ~/.config/i3/status_wrapper.sh
position top
output $primary
}
for_window [class="^.*"] border pixel 2
hide_edge_borders smart
default_orientation auto
# window to workspace assignments
assign [class="st"] $ws1
bindsym $mod+Shift+l exec "i3lock -i $HOME/.config/i3/wallpaper.png"
# screenshots
# capture full screen on the main monitor
bindsym $mod+Shift+s exec "scrot -z -M 0 -e 'dunstify \\"Screenshot taken\\" $f'"
# capture selection
bindsym $mod+Control+s exec "scrot -s -f -z -e 'dunstify \\"Screenshot taken\\" $f'"
# capture focused window
bindsym $mod+Mod1+s exec "scrot -u -z -e 'dunstify \\"Screenshot taken\\" $f'"
exec_always --no-startup-id autotiling &
exec --no-startup-id ~/.config/i3/autostart &
+63
View File
@@ -0,0 +1,63 @@
#!/bin/sh
# Roid: barebones Void Linux setup script for Termux environment
# includes sound support via PulseAudio server
# and X11 graphics support via Termux-X11 server
# Set NOX=y to disable graphics package installation
# and NOEXTRAS=y to disable extra CLI package installation
# (or BAREBONES=y to disable both at once)
# Created by Luxferre in 2026, released into the public domain
# Non-GUI packages
BASE_PKGS='base-container-full void-repo-nonfree base-devel curl git nano mc pulseaudio alsa-plugins-pulseaudio'
EXTRA_PKGS='libcurl-devel dtach fzf tcl tcllib tcltls janet jpm expect zip p7zip unrar rlwrap jq yq miller htop the_silver_searcher gnupg pass progress discount aria2 rsync aerc netcat socat websocat nmap lynx ImageMagick mpg123 mpv sox ffmpeg dumbplay yt-dlp'
# GUI packages
X11_PKGS='xcursor-themes xcursor-vanilla-dmz-aa setxkbmap xkb-switch xdg-utils xdg-user-dirs xsel xss-lock xdotool xrandr xmodmap'
X_APPS='dbus mesa mesa-dri mesa-demos mesa-vaapi glxinfo dex i3 i3lock i3status i3cat i3wsr rofi autotiling scrot dunst picom feh volumeicon'
FONT_PKGS='noto-fonts-ttf noto-fonts-ttf-extra noto-fonts-cjk noto-fonts-emoji noto-fonts-ttf-variable liberation-fonts-ttf font-firacode fonts-roboto-ttf'
GUI_PKGS="$X11_PKGS $FONT_PKGS $X_APPS"
if [ "$BAREBONES" = "y" ]; then
NOX=y
NOEXTRAS=y
fi
[ -z "$NOX" ] && NOX=n
[ -z "$NOEXTRAS" ] && NOEXTRAS=n
echo 'Setting up host environment...'
pkg upgrade -y
pkg install -y proot-distro pulseaudio
cat >> $HOME/.profile <<'EOF'
pulseaudio --start --exit-idle-time=-1 # ROID_INST
pacmd load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1 # ROID_INST
EOF
if [ "$NOX" = "n" ]; then
pkg install -y x11-repo
pkg install -y termux-x11-nightly virglrenderer-android
echo 'virgl_test_server_android & # ROID_INST' >> $HOME/.profile
fi
cat >> $HOME/.bashrc <<'EOF'
alias void="proot-distro login -P -e TERMUX_HOME=$HOME void-glibc-full" # ROID_INST
alias voidrun='proot-distro run -P void-glibc-full --' # ROID_INST
alias roidclean='killall pulseaudio virgl_test_server_android' # ROID_INST
EOF
echo 'Installing Void Linux...'
proot-distro install ghcr.io/void-linux/void-glibc-full
echo 'Base distro setup...'
proot-distro run void-glibc-full -- sh -c "xbps-install -Suyy && xbps-install -Sy $BASE_PKGS"
if [ "$NOEXTRAS" = "n" ]; then
echo 'Extra package setup...'
proot-distro run void-glibc-full -- sh -c "xbps-install -Suy && xbps-install -Sy $EXTRA_PKGS"
fi
if [ "$NOX" = "n" ]; then
echo 'GUI setup...'
proot-distro run void-glibc-full -- sh -c "xbps-install -Suyy && xbps-install -Sy $GUI_PKGS"
fi
echo 'Post-installation steps (CLI)...'
proot-distro run void-glibc-full -e TERMUX_HOME=$HOME -- sh $HOME/roid/postinstall-cli
if [ "$NOX" = "n" ]; then
echo 'Post-installation steps (GUI)...'
proot-distro run void-glibc-full -- sh -c "ln -s $TMPDIR/.virgl_test /tmp/"
proot-distro run void-glibc-full -e TERMUX_HOME=$HOME -- sh $HOME/roid/postinstall-gui
fi
echo 'Done. Restart the Termux shell to take effect, then type void to start the OS'
+15
View File
@@ -0,0 +1,15 @@
#!/bin/sh
# Roid post-installation steps for CLI environment
cat > /root/.bash_profile <<'EOF'
export LC_ALL=C.UTF-8
export LANG=C.UTF-8
[[ -f /root/.bashrc ]] && [[ $- == *i* ]] && . /root/.bashrc
EOF
cat > /root/.bashrc <<'EOF'
PS1='\W # '
. /root/roidrc
EOF
cp $TERMUX_HOME/roid/.roidrc /root/.roidrc
+67
View File
@@ -0,0 +1,67 @@
#!/bin/sh
# Roid post-installation steps for GUI desktop environment
# !!!under construction!!!
# system DPI (TBD how to handle it more correctly)
SYSDPI=144
cd /root
cat >> .bash_profile <<'EOF'
export DISPLAY=:0
export GALLIUM_DRIVER=virpipe
EOF
# install st
echo 'Installing st...'
git clone https://github.com/veltza/st-sx.git
cd st-sx
sed -i 's/Liberation Mono:pixelsize=12/Fira Code:size=14/g' config.def.h
sed -i 's|/bin/sh|/bin/bash|g' config.def.h
sed -i 's/st-256color/xterm-256color/g' config.def.h
sed -i 's/alpha = 0.8;/alpha = 0.9;/g' config.def.h
sed -i 's/ligatures = 0;/ligatures = 1;/g' config.def.h
make
sudo make install
cd ..
rm -rf st-sx
echo 'Preparing i3 configuration...'
mkdir -p .config/i3
cat > .config/i3/status_wrapper.sh <<'EOF'
#!/bin/bash
i3status | while :
do
read line
LAYOUT=$(xkb-switch -p | cut -f 1 -d '(')
echo "${line/[/$LAYOUT}" || exit 1
done
EOF
cp $TERMUX_HOME/roid/i3config .config/i3/config
cp $TERMUX_HOME/roid/i3autostart .config/i3/autostart
cp $TERMUX_HOME/roid/wallpaper.png .config/i3/wallpaper.png
chmod +x .config/i3/autostart
echo 'Preparing Rofi configuration...'
mkdir -p .config/rofi
cat > .config/rofi/config.rasi <<EOF
@theme "/usr/share/rofi/themes/gruvbox-dark-hard.rasi"
configuration {
dpi: ${SYSDPI};
}
EOF
echo 'Preparing Dunst configuration...'
mkdir -p .config/dunst
cp $TERMUX_HOME/roid/dunstrc .config/dunst/
echo 'Preparing Xresources...'
cat > .Xresources <<EOF
Xft.dpi: $SYSDPI
*.dpi: 96
Xcursor.theme: Vanilla-DMZ-AA
Xcursor.size: 32
St.font: Fira Code:size=14:antialias=true:autohint=true
GDK_SCALE: 1
GDK_DPI_SCALE: 1
EOF
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
roidclean
pd remove void-glibc-full
sed -i '/ROID_INST/d' ~/.profile
sed -i '/ROID_INST/d' ~/.bashrc
pkg remove -y proot-distro pulseaudio x11-repo termux-x11-nightly virglrenderer-android
pkg autoremove -y
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB