NEW START

This commit is contained in:
2025-10-24 21:16:16 +02:00
commit 16fc39c343
71 changed files with 9097 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
# Run after "apt update" is done
APT::Update::Post-Invoke-Success {"yt-dlp -U";};

View File

@@ -0,0 +1,15 @@
Package: *
Pin: origin stable-backports
Pin-Priority: 500
Package: *
Pin: release a=unstable
Pin-Priority: -1
Package: *
Pin: release a=experimental
Pin-Priority: -1
Package: *
Pin: release a=testing
Pin-Priority: -1

View File

@@ -0,0 +1,34 @@
Types: deb deb-src
URIs: https://deb.debian.org/debian
Suites: APTLISTOS APTLISTOS-updates stable-backports
Components: main contrib non-free non-free-firmware
Enabled: yes
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb deb-src
URIs: https://security.debian.org/debian-security
Suites: APTLISTOS-security
Components: main contrib non-free non-free-firmware
Enabled: yes
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb deb-src
URIs: https://deb.debian.org/debian
Suites: unstable
Components: main contrib non-free non-free-firmware
Enabled: yes
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb deb-src
URIs: https://deb.debian.org/debian/
Suites: testing
Components: main contrib non-free non-free-firmware
Enabled: yes
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb deb-src
URIs: https://deb.debian.org/debian/
Suites: experimental
Components: main contrib non-free non-free-firmware
Enabled: yes
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

View File

@@ -0,0 +1,421 @@
#!/usr/bin/env python3
##############################################
# Auto Qtile keybindings - image generator #
# Qmade version of the configuration #
##############################################
import getopt
import os
import sys
import cairocffi as cairo
from cairocffi import ImageSurface
this_dir = os.path.dirname(__file__)
base_dir = os.path.abspath(os.path.join(this_dir, ".."))
sys.path.insert(0, base_dir)
BUTTON_NAME_Y = 65
BUTTON_NAME_X = 10
COMMAND_Y = 20
COMMAND_X = 10
LEGEND = ["modifiers", "layout", "group", "window", "other"]
CUSTOM_KEYS = {
"Backspace": 2,
"Tab": 1.5,
"\\": 1.5,
"Return": 2.4533,
"shift": 2,
"space": 5,
}
class Button:
def __init__(self, key, x, y, width, height):
self.key = key
self.x = x
self.y = y
self.width = width
self.height = height
class Pos:
WIDTH = 78
HEIGHT = 70
GAP = 5
def __init__(self, x, y):
self.x = x
self.row_x = x
self.y = y
self.custom_width = {}
for i, val in CUSTOM_KEYS.items():
self.custom_width[i] = val * self.WIDTH
def get_pos(self, name):
if name in self.custom_width:
width = self.custom_width[name]
else:
width = self.WIDTH
info = Button(name, self.x, self.y, width, self.HEIGHT)
self.x = self.x + self.GAP + width
return info
def skip_x(self, times=1):
self.x = self.x + self.GAP + times * self.WIDTH
def next_row(self):
self.x = self.row_x
self.y = self.y + self.GAP + self.HEIGHT
class KeyboardPNGFactory:
def __init__(self, modifiers, keys):
self.keys = keys
self.modifiers = modifiers.split("-")
self.key_pos = self.calculate_pos(20, 140)
def rgb_red(self, context):
context.set_source_rgb(0.8431372549, 0.3725490196, 0.3725490196)
def rgb_green(self, context):
context.set_source_rgb(0.6862745098, 0.6862745098, 0)
def rgb_yellow(self, context):
context.set_source_rgb(1, 0.6862745098, 0)
def rgb_cyan(self, context):
context.set_source_rgb(0.5137254902, 0.6784313725, 0.6784313725)
def rgb_violet(self, context):
context.set_source_rgb(0.831372549, 0.5215686275, 0.6784313725)
def calculate_pos(self, x, y):
pos = Pos(x, y)
key_pos = {}
for c in "`1234567890-=":
key_pos[c] = pos.get_pos(c)
key_pos["Backspace"] = pos.get_pos("Backspace")
pos.next_row()
key_pos["Tab"] = pos.get_pos("Tab")
for c in "qwertyuiop[]\\":
key_pos[c] = pos.get_pos(c)
pos.next_row()
pos.skip_x(1.6)
for c in "asdfghjkl;'":
key_pos[c] = pos.get_pos(c)
key_pos["Return"] = pos.get_pos("Return")
pos.next_row()
key_pos["shift"] = pos.get_pos("shift")
for c in "zxcvbnm":
key_pos[c] = pos.get_pos(c)
key_pos["period"] = pos.get_pos("period")
key_pos["comma"] = pos.get_pos("comma")
key_pos["/"] = pos.get_pos("/")
pos.next_row()
key_pos["control"] = pos.get_pos("control")
pos.skip_x()
key_pos["mod4"] = pos.get_pos("mod4")
key_pos["mod1"] = pos.get_pos("mod1")
key_pos["space"] = pos.get_pos("space")
key_pos["Print"] = pos.get_pos("Print")
pos.skip_x(3)
key_pos["Up"] = pos.get_pos("Up")
pos.next_row()
pos.skip_x(12.33)
key_pos["Left"] = pos.get_pos("Left")
key_pos["Down"] = pos.get_pos("Down")
key_pos["Right"] = pos.get_pos("Right")
pos.next_row()
for legend in LEGEND:
key_pos[legend] = pos.get_pos(legend)
pos.skip_x(5)
key_pos["Button1"] = pos.get_pos("Button1")
key_pos["Button2"] = pos.get_pos("Button2")
key_pos["Button3"] = pos.get_pos("Button3")
pos.next_row()
key_pos["FN_KEYS"] = pos.get_pos("FN_KEYS")
return key_pos
def render(self, filename):
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 1280, 800)
context = cairo.Context(surface)
with context:
context.set_source_rgb(1, 1, 1)
context.paint()
context.move_to(40, 50)
context.set_font_size(34)
context.show_text("Qmade - Keybindings for Qtile")
context.move_to(40, 80)
context.set_font_size(22)
if len([i for i in self.modifiers if i]):
context.show_text("Modifiers: " + ", ".join(self.modifiers))
else:
context.show_text("No modifiers used.")
for i in self.key_pos.values():
if i.key in ["FN_KEYS"]:
continue
self.draw_button(context, i.key, i.x, i.y, i.width, i.height)
# draw functional
fn = [i for i in keys.values() if i.key[:4] == "XF86"]
if len(fn):
fn_pos = self.key_pos["FN_KEYS"]
x = fn_pos.x
for i in fn:
self.draw_button(context, i.key, x, fn_pos.y, fn_pos.width, fn_pos.height)
x += Pos.GAP + Pos.WIDTH
# draw mouse base
context.rectangle(830, 670, 244, 90)
context.set_source_rgb(0, 0, 0)
context.stroke()
context.set_font_size(28)
context.move_to(900, 730)
context.show_text("MOUSE")
surface.write_to_png(filename)
def draw_button(self, context, key, x, y, width, height):
radius = 5 # Radius for the rounded corners
fn = False
if key[:4] == "XF86":
fn = True
if key in LEGEND:
if key == "modifiers":
self.rgb_red(context)
elif key == "group":
self.rgb_green(context)
elif key == "layout":
self.rgb_cyan(context)
elif key == "window":
self.rgb_yellow(context)
else:
self.rgb_violet(context)
self.rounded_rectangle(context, x, y, width, height, radius)
context.fill()
if key in self.modifiers:
self.rounded_rectangle(context, x, y, width, height, radius)
self.rgb_red(context)
context.fill()
if key in self.keys:
k = self.keys[key]
self.rounded_rectangle(context, x, y, width, height, radius)
self.set_key_color(context, k)
context.fill()
self.show_multiline(context, x + COMMAND_X, y + COMMAND_Y, k)
self.rounded_rectangle(context, x, y, width, height, radius)
context.set_source_rgb(0, 0, 0)
context.stroke()
if fn:
key = key[4:]
context.set_font_size(10)
else:
context.set_font_size(14)
context.move_to(x + BUTTON_NAME_X, y + BUTTON_NAME_Y)
context.show_text(self.translate(key))
def rounded_rectangle(self, context, x, y, width, height, radius):
context.new_path()
context.arc(x + radius, y + radius, radius, 2 * (3.14 / 2), 3 * (3.14 / 2))
context.arc(x + width - radius, y + radius, radius, 3 * (3.14 / 2), 4 * (3.14 / 2))
context.arc(x + width - radius, y + height - radius, radius, 0, 3.14 / 2)
context.arc(x + radius, y + height - radius, radius, 3.14 / 2, 2 * (3.14 / 2))
context.close_path()
def show_multiline(self, context, x, y, key):
"""Cairo doesn't support multiline. Added with word wrapping."""
c_width = 14
if key.key in CUSTOM_KEYS:
c_width *= CUSTOM_KEYS[key.key]
context.set_font_size(10)
context.set_source_rgb(0, 0, 0)
context.move_to(x, y)
words = key.command.split(" ")
words.reverse()
printable = last_word = words.pop()
while len(words):
last_word = words.pop()
if len(printable + " " + last_word) < c_width:
printable += " " + last_word
continue
context.show_text(printable)
y += 10
context.move_to(x, y)
printable = last_word
if last_word is not None:
context.show_text(printable)
def set_key_color(self, context, key):
if key.scope == "group":
self.rgb_green(context)
elif key.scope == "layout":
self.rgb_cyan(context)
elif key.scope == "window":
self.rgb_yellow(context)
else:
self.rgb_violet(context)
def translate(self, text):
dictionary = {
"period": ",",
"comma": ".",
"Left": "←",
"Down": "↓",
"Right": "→",
"Up": "↑",
"AudioRaiseVolume": "Volume up",
"AudioLowerVolume": "Volume down",
"AudioMute": "Audio mute",
"AudioMicMute": "Mic mute",
"MonBrightnessUp": "Brightness up",
"MonBrightnessDown": "Brightness down",
}
if text not in dictionary:
return text
return dictionary[text]
class KInfo:
NAME_MAP = {
"togroup": "to group",
"toscreen": "to screen",
}
def __init__(self, key):
self.key = key.key
self.command = self.get_command(key)
self.scope = self.get_scope(key)
def get_command(self, key):
if hasattr(key, "desc") and key.desc:
return key.desc
cmd = key.commands[0]
command = cmd.name
if command in self.NAME_MAP:
command = self.NAME_MAP[command]
command = command.replace("_", " ")
if len(cmd.args):
if isinstance(cmd.args[0], str):
command += " " + cmd.args[0]
return command
def get_scope(self, key):
selectors = key.commands[0].selectors
if len(selectors):
return selectors[0][0]
class MInfo(KInfo):
def __init__(self, mouse):
self.key = mouse.button
self.command = self.get_command(mouse)
self.scope = self.get_scope(mouse)
def get_kb_map(config_path=None):
from libqtile.confreader import Config
c = Config(config_path)
if config_path:
c.load()
kb_map = {}
for key in c.keys:
mod = "-".join(key.modifiers)
if mod not in kb_map:
kb_map[mod] = {}
info = KInfo(key)
kb_map[mod][info.key] = info
for mouse in c.mouse:
mod = "-".join(mouse.modifiers)
if mod not in kb_map:
kb_map[mod] = {}
info = MInfo(mouse)
kb_map[mod][info.key] = info
return kb_map
help_doc = """
usage: gen-keybinding-img [-h] [-c CONFIGFILE] [-o OUTPUT_DIR]
Qtile keybindings image generator
optional arguments:
-h, --help show this help message and exit
-c CONFIGFILE, --config CONFIGFILE
use specified configuration file. If no presented
default will be used
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
set directory to export all images to
"""
if __name__ == "__main__":
config_path = os.path.expanduser("~/.config/qtile/config.py") # Set default config path
output_dir = ""
try:
opts, args = getopt.getopt(sys.argv[1:], "hc:o:", ["help=", "config=", "output-dir="])
except getopt.GetoptError:
print(help_doc)
sys.exit(2)
for opt, arg in opts:
if opt in ("-h", "--help"):
print(help_doc)
sys.exit()
elif opt in ("-c", "--config"):
config_path = arg
elif opt in ("-o", "--output-dir"):
output_dir = arg
kb_map = get_kb_map(config_path)
for modifier, keys in kb_map.items():
if not modifier:
filename = "keybinding_no_modifier.png"
else:
filename = "keybinding_{}.png".format(modifier)
output_file = os.path.abspath(os.path.join(output_dir, filename))
f = KeyboardPNGFactory(modifier, keys)
f.render(output_file)

329
src/config/kitty/kitty.conf Normal file
View File

@@ -0,0 +1,329 @@
# A default configuration file can also be generated by running:
# kitty +runpy 'from kitty.config import *; print(commented_out_default_config())'
#
# The following command will bring up the interactive terminal GUI
# kitty +kitten themes
#
# kitty +kitten themes Catppuccin-Mocha
# kitty +kitten themes --reload-in=all Catppuccin-Mocha
background_opacity 0.98
font_family JetBrainsMono Nerd Font Mono
bold_font auto
italic_font auto
bold_italic_font auto
font_size 14
force_ltr no
adjust_line_height 0
adjust_column_width 0
adjust_baseline 0
disable_ligatures never
box_drawing_scale 0.001, 1, 1.5, 2
cursor #f2f2f2
cursor_text_color #f2f2f2
cursor_shape underline
cursor_beam_thickness 1.5
cursor_underline_thickness 2.0
cursor_blink_interval -1
cursor_stop_blinking_after 99.0
scrollback_lines 5000
scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER
scrollback_pager_history_size 0
scrollback_fill_enlarged_window no
wheel_scroll_multiplier 5.0
touch_scroll_multiplier 1.0
mouse_hide_wait 3.0
#mouse_map right click paste_from_clipboard
url_color #0087bd
url_style curly
open_url_with default
url_prefixes http https file ftp gemini irc gopher mailto news git
detect_urls yes
#url_excluded_characters
copy_on_select yes
strip_trailing_spaces never
select_by_word_characters @-./_~?&=%+#
click_interval -1.0
focus_follows_mouse no
pointer_shape_when_grabbed arrow
default_pointer_shape beam
pointer_shape_when_dragging beam
mouse_map left click ungrabbed mouse_click_url_or_select
mouse_map shift+left click grabbed,ungrabbed mouse_click_url_or_select
mouse_map ctrl+shift+left release grabbed,ungrabbed mouse_click_url
mouse_map ctrl+shift+left press grabbed discard_event
mouse_map middle release ungrabbed paste_from_selection
mouse_map left press ungrabbed mouse_selection normal
mouse_map ctrl+alt+left press ungrabbed mouse_selection rectangle
mouse_map left doublepress ungrabbed mouse_selection word
mouse_map left triplepress ungrabbed mouse_selection line
mouse_map ctrl+alt+left triplepress ungrabbed mouse_selection line_from_point
#mouse_map right press ungrabbed mouse_selection extend
mouse_map shift+middle release ungrabbed,grabbed paste_selection
mouse_map shift+left press ungrabbed,grabbed mouse_selection normal
mouse_map shift+ctrl+alt+left press ungrabbed,grabbed mouse_selection rectangle
mouse_map shift+left doublepress ungrabbed,grabbed mouse_selection word
mouse_map shift+left triplepress ungrabbed,grabbed mouse_selection line
mouse_map shift+ctrl+alt+left triplepress ungrabbed,grabbed mouse_selection line_from_point
repaint_delay 10
input_delay 5
sync_to_monitor yes
enable_audio_bell no
visual_bell_duration 0.0
window_alert_on_bell no
bell_on_tab no
command_on_bell none
remember_window_size yes
initial_window_width 800
initial_window_height 500
enabled_layouts *
window_resize_step_cells 2
window_resize_step_lines 2
window_border_width 0.0pt
draw_minimal_borders yes
window_margin_width 0
single_window_margin_width -1
window_padding_width 3
placement_strategy center
active_border_color #f2f2f2
inactive_border_color #cccccc
bell_border_color #ff5a00
inactive_text_alpha 1.0
hide_window_decorations no
resize_debounce_time 0.1
#resize_draw_strategy static
resize_in_steps no
confirm_os_window_close 0
tab_bar_edge bottom
tab_bar_margin_width 0.0
tab_bar_margin_height 0.0 0.0
tab_bar_style fade
tab_bar_min_tabs 2
tab_switch_strategy previous
tab_fade 0.25 0.5 0.75 1
tab_separator " |"
tab_powerline_style angled
tab_activity_symbol none
tab_title_template "{title}"
active_tab_title_template none
active_tab_foreground #000
active_tab_background #eee
active_tab_font_style bold-italic
inactive_tab_foreground #444
inactive_tab_background #999
inactive_tab_font_style normal
tab_bar_background none
background_image none
background_image_layout tiled
background_image_linear no
dynamic_background_opacity no
background_tint 0.0
dim_opacity 0.75
selection_foreground #000000
selection_background #fffacd
mark1_foreground black
mark1_background #98d3cb
mark2_foreground black
mark2_background #f2dcd3
mark3_foreground black
mark3_background #f274bc
shell .
editor .
close_on_child_death no
allow_remote_control yes
listen_on none
update_check_interval 0
startup_session none
clipboard_control write-clipboard write-primary
allow_hyperlinks yes
term xterm-kitty
wayland_titlebar_color system
macos_titlebar_color system
macos_option_as_alt no
macos_hide_from_tasks no
macos_quit_when_last_window_closed no
macos_window_resizable yes
macos_thicken_font 0
macos_traditional_fullscreen no
macos_show_window_title_in all
macos_custom_beam_cursor no
linux_display_server auto
kitty_mod ctrl+shift
clear_all_shortcuts no
map kitty_mod+c copy_to_clipboard
map kitty_mod+v paste_from_clipboard
map kitty_mod+up scroll_line_up
map kitty_mod+down scroll_line_down
map kitty_mod+page_up scroll_page_up
map kitty_mod+page_down scroll_page_down
map kitty_mod+home scroll_home
map kitty_mod+end scroll_end
map kitty_mod+h show_scrollback
map kitty_mod+w close_window
map kitty_mod+] next_window
map kitty_mod+[ previous_window
map kitty_mod+f move_window_forward
map kitty_mod+b move_window_backward
map kitty_mod+` move_window_to_top
map kitty_mod+r start_resizing_window
map kitty_mod+1 first_window
map kitty_mod+2 second_window
map kitty_mod+3 third_window
map kitty_mod+4 fourth_window
map kitty_mod+5 fifth_window
map kitty_mod+6 sixth_window
map kitty_mod+7 seventh_window
map kitty_mod+8 eighth_window
map kitty_mod+9 ninth_window
map kitty_mod+0 tenth_window
map kitty_mod+right next_tab
map kitty_mod+left previous_tab
map kitty_mod+t new_tab
map kitty_mod+q close_tab
map shift+cmd+w close_os_window
map kitty_mod+. move_tab_forward
map kitty_mod+, move_tab_backward
map kitty_mod+alt+t set_tab_title
map kitty_mod+l next_layout
map kitty_mod+equal change_font_size all +2.0
map kitty_mod+minus change_font_size all -2.0
map kitty_mod+backspace change_font_size all 0
map kitty_mod+e kitten hints
map kitty_mod+p>f kitten hints --type path --program -
map kitty_mod+p>shift+f kitten hints --type path
map kitty_mod+p>l kitten hints --type line --program -
map kitty_mod+p>w kitten hints --type word --program -
map kitty_mod+p>h kitten hints --type hash --program -
map kitty_mod+p>n kitten hints --type linenum
map kitty_mod+p>y kitten hints --type hyperlink
map kitty_mod+f11 toggle_fullscreen
map kitty_mod+f10 toggle_maximized
map kitty_mod+u kitten unicode_input
map kitty_mod+f2 edit_config_file
map kitty_mod+escape kitty_shell window
map kitty_mod+a>m set_background_opacity +0.1
map kitty_mod+a>l set_background_opacity -0.1
map kitty_mod+a>1 set_background_opacity 1
map kitty_mod+a>d set_background_opacity default
map kitty_mod+delete clear_terminal reset active
map kitty_mod+f5 load_config_file
map kitty_mod+f6 debug_config
include ~/.cache/wal/colors-kitty.conf

40
src/config/qtile/autostart.sh Executable file
View File

@@ -0,0 +1,40 @@
#!/usr/bin/env bash
# Picom - https://manpages.debian.org/stable/picom/picom.1.en.html
pgrep -x picom >/dev/null || picom --backend xrender --vsync --no-fading-openclose --no-fading-destroyed-argb &
# Picom use... --backend glx or xrender, --vsync --no-vsync --no-fading-openclose --no-fading-destroyed-argb etc.
exec /usr/bin/lxpolkit & # Graphical authentication agent
autorandr --change &
# This here if statement sets your background image, with feh...
# and is also used for the auto-generation of the background image and colors.
if [ -f ~/.fehbg ]; then
. ~/.fehbg
else
auto-new-wallpaper-and-colors
#feh --bg-scale $(find ~/Wallpapers -type f | shuf -n 1)
fi
wpctl set-mute @DEFAULT_AUDIO_SINK@ 0 &
wpctl set-volume @DEFAULT_AUDIO_SINK@ 25% &
dunst &
#numlockx on &
#mpd &
if [ -f ~/.Xresources ]; then
xrdb ~/.Xresources &
fi
#keynav &
#kdeconnectd &
#
# Turn off the Screen after X time in seconds
xset s 2700 &
# Run & Remove .first-login-user-setup file --------------------------------------------------------------
if [ -f ~/.first-login-user-setup ]; then
. ~/.first-login-user-setup
sleep 0.69
rm -f ~/.first-login-user-setup
fi

366
src/config/qtile/config.py Normal file
View File

@@ -0,0 +1,366 @@
# Qtile Config - Start
# https://docs.qtile.org/en/latest/index.html
# -',.-'-,.'-,'.-',.-',-.'-,.'-,.'-,.'-,'.-',.-'-
import os
import subprocess
import json
from libqtile import bar, layout, qtile, widget, hook
from libqtile.config import Click, Drag, Group, Key, Match, Screen, ScratchPad, DropDown, re
from libqtile.lazy import lazy
from libqtile.utils import guess_terminal # terminal = guess_terminal()
# Custom code start ----------------------------------------------------
def guess_browser():
"""Guess the default web browser."""
# Define a list of common web browsers
browsers = ["google-chrome", "firefox", "chromium", "vivaldi", "opera", "brave-browser", "safari"]
# Loop through the list of browsers and check if they exist in PATH
for browser in browsers:
try:
subprocess.run(["which", browser], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return browser
except subprocess.CalledProcessError:
continue
# If no browser is found, return None
return None
# Custom code end ------------------------------------------------------
#Pywal Colors
colors = os.path.expanduser("~/.cache/wal/colors.json")
colordict = json.load(open(colors))
Color0 = colordict["colors"]["color0"]
Color1 = colordict["colors"]["color1"]
Color2 = colordict["colors"]["color2"]
Color3 = colordict["colors"]["color3"]
Color4 = colordict["colors"]["color4"]
Color5 = colordict["colors"]["color5"]
Color6 = colordict["colors"]["color6"]
Color7 = colordict["colors"]["color7"]
Color8 = colordict["colors"]["color8"]
Color9 = colordict["colors"]["color9"]
Color10 = colordict["colors"]["color10"]
Color11 = colordict["colors"]["color11"]
Color12 = colordict["colors"]["color12"]
Color13 = colordict["colors"]["color13"]
Color14 = colordict["colors"]["color14"]
Color15 = colordict["colors"]["color15"]
# Colors use example active=Color1,
mod = "mod4"
terminal = "kitty -o background_opacity=0.95"
browser = guess_browser()
fileexplorer = "thunar"
runmenu = 'rofi -modi "drun,run,window,filebrowser" -show drun -icon-theme "Nordzy-dark" -show-icons' # Switch between -modi... Default key CTRL+TAB
keys = [
# A list of available commands that can be bound to keys can be found
# at https://docs.qtile.org/en/latest/manual/config/lazy.html
#
# Examples:
# a key binding that can run an external Script or Command
# Key([mod], "l", lazy.spawn(os.path.expanduser("xsecurelock")), desc='Computer Lockdown'),
#
# a normal key binding that pulls from a variable
# Key([mod], "Return", lazy.spawn(terminal), desc="Launch Terminal"),
# Keybindings
Key([mod], "Return", lazy.spawn(terminal), desc="Terminal"),
Key([mod], "b", lazy.spawn(browser), desc="Web Browser"),
Key([mod], "e", lazy.spawn(fileexplorer), desc="File Explorer"),
Key([mod], "r", lazy.spawn(runmenu), desc="Run Menu"),
Key([mod, "shift"], "r", lazy.spawncmd(), desc="Spawn a command using a prompt widget"),
Key([mod, "mod1"], "l", lazy.spawn(os.path.expanduser("xsecurelock")), desc="Computer Lockdown"),
Key([mod, "control", "mod1"], "t", lazy.spawn(os.path.expanduser("auto-new-wallpaper-and-colors")), desc="Random Color Theme from Wallpapers"),
Key([mod, "control", "mod1"], "w", lazy.spawn(os.path.expanduser("~/.config/rofi/rofi-wifi-menu.sh")), desc="WiFi Manager"),
Key([mod, "control", "mod1"], "p", lazy.spawn(os.path.expanduser("~/.config/rofi/powermenu.sh")), desc="Power Menu"),
Key([mod, "control", "mod1"], "n", lazy.spawn(os.path.expanduser("kitty -e sudo nmtui")), desc="Network Manager"),
# Default
Key([mod], "h", lazy.layout.left(), desc="Move focus to left"),
Key([mod], "l", lazy.layout.right(), desc="Move focus to right"),
Key([mod], "j", lazy.layout.down(), desc="Move focus down"),
Key([mod], "k", lazy.layout.up(), desc="Move focus up"),
Key([mod], "space", lazy.layout.next(), desc="Move window focus to other window"),
# Move windows between left/right columns or move up/down in current stack.
# Moving out of range in Columns layout will create new column.
Key([mod, "shift"], "h", lazy.layout.shuffle_left(), desc="Move window to the left"),
Key([mod, "shift"], "l", lazy.layout.shuffle_right(), desc="Move window to the right"),
Key([mod, "shift"], "j", lazy.layout.shuffle_down(), desc="Move window down"),
Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"),
# Grow windows. If current window is on the edge of screen and direction
# will be to screen edge - window would shrink.
Key([mod, "control"], "h", lazy.layout.grow_left(), lazy.layout.grow(), desc="Grow window to the left"),
Key([mod, "control"], "l", lazy.layout.grow_right(), lazy.layout.shrink(), desc="Grow window to the right"),
Key([mod, "control"], "j", lazy.layout.grow_down(), desc="Grow window down"),
Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"),
Key([mod, "control"], "n", lazy.layout.normalize(), lazy.layout.reset(), desc="Reset all window sizes"),
# Toggle between split and unsplit sides of stack.
# Split = all windows displayed
# Unsplit = 1 window displayed, like Max layout, but still with
# multiple stack panes
Key([mod, "shift"], "space", lazy.layout.toggle_split(), desc="Toggle between split and unsplit sides of stack"),
# Toggle between different layouts as defined below
Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts"),
Key([mod], "w", lazy.window.kill(), desc="Kill focused window"),
Key([mod], "f", lazy.window.toggle_fullscreen(), desc="Toggle fullscreen on the focused window"),
Key([mod], "t", lazy.window.toggle_floating(), desc="Toggle floating on the focused window"),
Key([mod, "mod1", "control"], "r", lazy.reload_config(), desc="Reload the config"),
Key([mod, "mod1", "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"),
# Audio
Key([mod, "mod1"], "Up", lazy.spawn("wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+"), desc='Volume Up'),
Key([mod, "mod1"], "Down", lazy.spawn("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), desc='Volume Down'),
Key([mod, "mod1"], "m", lazy.spawn("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), desc='Volume Mute Toggle'),
Key([mod, "mod1", "control"], "a", lazy.spawn("audio-toggle"), desc='Audio Source Toggle'),
Key([mod, "mod1"], "s", lazy.spawn("playerctl play-pause"), desc='Play-Pause'),
Key([mod, "mod1"], "p", lazy.spawn("playerctl previous"), desc='Previous'),
Key([mod, "mod1"], "n", lazy.spawn("playerctl next"), desc='Next'),
# XF86 Audio & Brightness keys
Key([mod, "shift"], "a", lazy.spawn("pavucontrol"), desc='Audio Control Panel'),
Key([], "XF86AudioRaiseVolume", lazy.spawn("wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+"), desc='Volume Up'),
Key([], "XF86AudioLowerVolume", lazy.spawn("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), desc='Volume Down'),
Key([], "XF86AudioMute", lazy.spawn("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), desc='Volume Mute Toggle'),
# mute/unmute the microphone - wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
# Show volume level - wpctl get-volume @DEFAULT_AUDIO_SINK@
Key([], "XF86AudioPlay", lazy.spawn("playerctl play-pause"), desc='Play-Pause'),
Key([], "XF86AudioPrev", lazy.spawn("playerctl previous"), desc='Previous'),
Key([], "XF86AudioNext", lazy.spawn("playerctl next"), desc='Next'),
Key([], "XF86MonBrightnessUp", lazy.spawn("brightnessctl set +10%"), desc='Brightness UP'),
Key([], "XF86MonBrightnessDown", lazy.spawn("brightnessctl set 10%-"), desc='Brightness Down'),
Key([], "Print", lazy.spawn("bash -c 'flameshot gui --path ~/Screenshots'"), desc='Screenshot'),
]
# Add key bindings to switch VTs in Wayland.
# We can't check qtile.core.name in default config as it is loaded before qtile is started
# We therefore defer the check until the key binding is run by using .when(func=...)
for vt in range(1, 8):
keys.append(
Key(
["control", "mod1"],
f"f{vt}",
lazy.core.change_vt(vt).when(func=lambda: qtile.core.name == "wayland"),
desc=f"Switch to VT{vt}",
)
)
# Create labels for groups and assign them a default layout.
# Find icons here - https://www.nerdfonts.com/cheat-sheet
# nf-linux-debian  nf-md-rocket_launch 󱓞 nf-cod-rocket  nf-cod-settings  nf-dev-android  nf-dev-chrome  nf-dev-terminal 
# nf-dev-prolog  nf-fa-apple  nf-fa-earlybirds  nf-fa-egg  nf-fa-grav  nf-fa-linux  nf-fa-snapchat 
# nf-fa-steam  nf-fa-terminal  nf-fa-wifi  nf-fae-pi  nf-md-recycle 󰑌 nf-md-symbol 󱔁 nf-fa-mug_hot 
# nf-fa-thermometer_2  nf-md-battery_medium 󱊢 nf-md-battery_charging 󰂄
# nf-fa-volume_high  nf-fa-volume_low  nf-fa-volume_xmark 
# nf-md-pac_man 󰮯 nf-md-ghost 󰊠 nf-fa-circle  nf-cod-circle_large  nf-cod-circle_filled  nf-md-circle_small 󰧟 nf-md-circle_medium 󰧞
# Group Match example: , matches=[Match(wm_class=["waterfox-default"])]
# Or start a programe on a Group at startup example: , spawn="google-chrome"
#
# Group("1", label="", layout="monadtall", matches=[Match(wm_class=re.compile(r"^(Google\-chrome)$"))]),
# Group("6", label="", layout="monadtall", matches=[Match(wm_class=["waterfox-default"])]),
groups = [
Group("1", label="", layout="monadtall"),
Group("2", label="", layout="monadtall"),
Group("3", label="", layout="monadtall"),
Group("4", label="", layout="monadtall"),
Group("5", label="", layout="monadtall"),
Group("6", label="", layout="monadtall"),
Group("7", label="", layout="monadtall"),
Group("8", label="", layout="monadtall"),
Group("9", label="", layout="max"),
Group("0", label="", layout="max"),
]
# Multiple screens setup for Groups.
# 0 or 1 Indicates which group should appear on which screen.
# Groups 1-10 on screen 0 or 1.
sn = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
for index, i in enumerate(groups):
keys.extend(
[
# mod1 + letter of group = switch to group/screen
Key(
[mod],
i.name,
lazy.group[i.name].toscreen(sn[index]),
lazy.to_screen(sn[index]),
desc="Switch to group {}".format(i.name),
),
# mod1 + shift + letter of group = switch to & move focused window to group
Key(
[mod, "shift"],
i.name,
lazy.window.togroup(i.name, switch_group=True),
desc="Switch to & move focused window to group {}".format(i.name),
),
]
)
# ScratchPad Keybindings
keys.extend([
Key([mod, "shift"], "Return", lazy.group['scratchpad'].dropdown_toggle('term1')),
Key([mod, "mod1"], "Return", lazy.group['scratchpad'].dropdown_toggle('term2')),
Key([mod, "control"], "Return", lazy.group['scratchpad'].dropdown_toggle('term3')),
Key([mod, "mod1", "control"], "Return", lazy.group['scratchpad'].dropdown_toggle('term4')),
Key([mod, "shift"], "e", lazy.group['scratchpad'].dropdown_toggle('file-explorer')),
# Key([mod, "shift"], "n", lazy.group['scratchpad'].dropdown_toggle('notes')),
Key([mod, "shift"], "m", lazy.group['scratchpad'].dropdown_toggle('music')),
])
# ScratchPads
groups.append(ScratchPad("scratchpad", [
DropDown("term1", "kitty --class=scratch", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1, on_focus_lost_hide=False),
DropDown("term2", "kitty --class=scratch --override background_opacity=1", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1, on_focus_lost_hide=False),
DropDown("term3", "kitty --class=scratch --override background_opacity=1", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1, on_focus_lost_hide=False),
DropDown("term4", "kitty --class=scratch --override background_opacity=1", width=0.9, height=0.9, x=0.5 - (0.9 / 2), y=0.5 - (0.9 / 2), opacity=1, on_focus_lost_hide=False),
DropDown("file-explorer", "kitty --class=yazi --override background_opacity=1 -e sudo yazi", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1, on_focus_lost_hide=False),
DropDown("audio", "kitty --class=volume -e alsamixer", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1),
DropDown("notes", "notepadqq", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1, on_focus_lost_hide=False),
DropDown("music", "kitty --class=music --override background_opacity=1 -e ncmpcpp", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1, on_focus_lost_hide=False),
]))
# Define layouts and layout themes
def init_layout_theme():
return {"margin":5,
"border_width":1,
"border_focus": Color6,
"border_normal": Color2
}
layout_theme = init_layout_theme()
layouts = [
layout.MonadTall(ratio=0.60, **layout_theme),
layout.Max(**layout_theme),
#layout.Bsp(**layout_theme),
#layout.Columns(**layout_theme),
#layout.Stack(num_stacks=2, **layout_theme),
#layout.Matrix(**layout_theme),
#layout.MonadWide(**layout_theme),
#layout.RatioTile(**layout_theme),
#layout.Tile(**layout_theme),
#layout.TreeTab(**layout_theme),
#layout.VerticalTile(**layout_theme),
#layout.Zoomy(**layout_theme),
]
widget_defaults = dict(
font="JetBrainsMono Nerd Font Propo",
fontsize=14,
background=Color0,
padding=1,
)
extension_defaults = widget_defaults.copy()
# Bar widgets - https://docs.qtile.org/en/latest/manual/ref/widgets.html
screens = [
Screen(
top=bar.Bar(
[
widget.CurrentLayout(scale=0.7, padding=5, mode="icon", icon_first=True),
widget.Spacer(length=2),
widget.GroupBox(fontsize=18, highlight_method="text", this_current_screen_border="#f7f7f7", highlight_color=Color14, this_screen_border=Color3, urgent_border=Color7, active=Color5, inactive=Color8, borderwidth=0, disable_drag=True),
widget.Spacer(length=2),
widget.Prompt(),
widget.Spacer(), # to get transparent background add background="#000000CC"
widget.WindowName(width=bar.CALCULATED, max_chars=130),
widget.Spacer(), # to get transparent background add background="#000000CC"
#widget.Systray(fmt="󱊖 {}", icon_size=16),
# NB Wayland is incompatible with Systray, consider using StatusNotifier
# widget.StatusNotifier(icon_size=16),
#widget.NetGraph(type='line', line_width=1),
#widget.Net(prefix='M'),
#widget.ThermalSensor(format='CPU: {temp:.0f}{unit}'),
widget.Volume(fmt="{}"),
widget.Spacer(length=7),
widget.Systray(background=Color0, padding=5, icon_size=16),
widget.Spacer(length=1),
widget.Clock(fmt=" {}",format="%A %d-%m-%Y %H:%M %p"),
widget.QuickExit(default_text='', countdown_format='{}', fontsize=16, countdown_start=3),
widget.Spacer(length=10),
], 30, # Define bar height
background="#000000CC", opacity=0.90, # Bar background color can also take transparency with "hex color code" or 0.XX
margin=[5, 5, 0, 5], # Space around bar as int or list of ints [N E S W]
border_width=[0, 0, 0, 0], # Width of border as int of list of ints [N E S W]
border_color=[Color2, Color2, Color2, Color2] # Border colour as str or list of str [N E S W]
),
),
]
# Drag floating layouts.
mouse = [
Drag([mod], "Button1", lazy.window.set_position_floating(), start=lazy.window.get_position()),
Drag([mod], "Button3", lazy.window.set_size_floating(), start=lazy.window.get_size()),
Click([mod], "Button2", lazy.window.bring_to_front()),
]
dgroups_key_binder = None
dgroups_app_rules = [] # type: list
follow_mouse_focus = True
bring_front_click = False
floats_kept_above = True
cursor_warp = False
floating_layout = layout.Floating(**layout_theme,
float_rules=[
# Run the utility xprop to see the wm class and name of an X client.
*layout.Floating.default_float_rules,
Match(wm_class="confirmreset"), # gitk
Match(wm_class="makebranch"), # gitk
Match(wm_class="maketag"), # gitk
Match(wm_class="ssh-askpass"), # ssh-askpass
Match(title="branchdialog"), # gitk
Match(title="pinentry"), # GPG key password entry
],
no_reposition_rules=[
Match(wm_class="pavucontrol"),
],
)
auto_fullscreen = True
focus_on_window_activation = "smart"
reconfigure_screens = True
cursor_warp = True
# If things like steam games want to auto-minimize themselves when losing
# focus, should we respect this or not?
auto_minimize = True
# Remember to add, "hook" "import os" "import subprocess" "Match"
@hook.subscribe.startup_once
def autostart():
autostartscript = os.path.expanduser("~/.config/qtile/autostart.sh")
subprocess.run([autostartscript])
@hook.subscribe.client_new
def move_window_to_group(client):
for group in groups:
if any(client.match(match) for match in group.matches):
client.togroup(group.name)
client.qtile.groups_map[group.name].toscreen()
break
# When using the Wayland backend, this can be used to configure input devices.
wl_input_rules = None
wmname = "Qtile"

9
src/etc/environment Normal file
View File

@@ -0,0 +1,9 @@
color_prompt="yes"
XDG_CURRENT_DESKTOP="Qtile (DanOS)"
# QT
QT_QPA_PLATFORMTHEME="EliverLara-Nordic"
QT_AUTO_SCREEN_SCALE_FACTOR="1"
#QT_SCALE_FACTOR="1"

View File

@@ -0,0 +1 @@
options snd_hda_intel power_save=0

View File

@@ -0,0 +1 @@
context.properties = {default.clock.min-quantum = 1024}

View File

@@ -0,0 +1,39 @@
monitor.alsa.rules = [
{
matches = [
{
# Matches all sources
node.name = "~alsa_input.*"
},
{
# Matches all sinks
node.name = "~alsa_output.*"
}
]
actions = {
update-props = {
session.suspend-timeout-seconds = 0
}
}
}
]
# bluetooth devices
monitor.bluez.rules = [
{
matches = [
{
# Matches all sources
node.name = "~bluez_input.*"
},
{
# Matches all sinks
node.name = "~bluez_output.*"
}
]
actions = {
update-props = {
session.suspend-timeout-seconds = 0
}
}
}
]

11
src/home/.audio-toggle Normal file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/env bash
# EDIT / SET
SPEAKERS="pactl set-card-profile alsa_card.pci-0000_0b_00.4 output:iec958-stereo+input:analog-stereo"
HEADPHONES="pactl set-card-profile alsa_card.pci-0000_0b_00.4 output:analog-stereo+input:analog-stereo"
if [ -f /tmp/SETHEADPHONES ]; then
eval "$HEADPHONES" && rm /tmp/SETHEADPHONES
else
eval "$SPEAKERS" && touch /tmp/SETHEADPHONES
fi

BIN
src/home/.face.icon Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

28
src/home/README-DanOS.md Normal file
View File

@@ -0,0 +1,28 @@
## DanOS Readme
## Keybindings
Default Modkey is the Windows key (**MOD4**) and **MOD1** is Alt Left.
**WIN + Enter** = Opens a Terminal.
**WIN + B** = Opens a browser.
**WIN + E** = Thunar File Explorer.
**WIN + SHIFT + E** = Yazi File Explorer in a ScratchPads.
**WIN + CTRL + ALT + P** = Power Menu for shutdown, reboot and lock screen.
**WIN + SHIFT + A** = Pavucontrol, Audio Control Panel.
**WIN + ALT + A** = Toggle between two sources like speaker and headphones. (Setup in file ~/.audio-toggle)
**WIN + CTRL + ALT + T** = Autogenerate a new background image and color theme,
from the Wallpaper folder in your home directory.
For a quick reference to the keybindings used in DanOS,
check out the Qtile config file under Keybindings in "~/.config/qtile/config.py" or run "qtileconfig" to see them all.

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 670 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 809 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 845 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 779 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 850 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 892 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 805 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 880 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 840 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
src/home/root.face.icon Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,64 @@
#!/usr/bin/env bash
# Debian ISO Remastering for QMADE - https://github.com/ITmail-dk/qmade/
# sudo apt install -y wget git xorriso isolinux p7zip-full fakeroot binutils
DEBIAN_ISO_URL=https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/
GET_ISO_NAME=$(curl -s https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/ | grep -oP 'debian-\d+(?:\.\d+)+-amd64-netinst\.iso' | head -n 1)
PRESEED_ISO_NAME=QMADE-Debian
#WORK_DIR=$(pwd)
ISO_WORK_TMP=iso-extract
# Setup the environment for creating the new ISO version.
function setup() {
sudo apt update && sudo apt install -y wget git xorriso isolinux p7zip-full fakeroot binutils
if [ ! -f Debian-source.iso ]; then
wget -O Debian-source.iso $DEBIAN_ISO_URL/"$GET_ISO_NAME"
fi
xorriso -osirrox on -indev Debian-source.iso -extract / $ISO_WORK_TMP
sudo chmod -R +w $ISO_WORK_TMP
sudo mkdir -p $ISO_WORK_TMP/var/cache/apt/archives
if [ ! -f preseed.cfg ]; then
wget https://raw.githubusercontent.com/ITmail-dk/qmade/refs/heads/main/preseed.cfg
fi
sudo cp preseed.cfg $ISO_WORK_TMP
sudo sed -i 's/append vga/append auto=true priority=critical vga/' $ISO_WORK_TMP/isolinux/gtk.cfg
sudo sed -i '/spkgtk\.cfg/d; /spk\.cfg/d' $ISO_WORK_TMP/isolinux/menu.cfg
sudo sed -i 's/--- quiet/--- quiet file=\/cdrom\/preseed.cfg/' $ISO_WORK_TMP/isolinux/gtk.cfg
sudo sed -i '0,/--- quiet/ s/--- quiet/--- quiet file=\/cdrom\/preseed.cfg/' $ISO_WORK_TMP/boot/grub/grub.cfg
sudo apt reinstall --download-only -y -o Dir::Cache="./" -o Dir::Cache::archives="iso-extract/var/cache/apt/archives" \
bash-completion xserver-xorg x11-utils xinit acl arandr autorandr picom fwupd colord mesa-utils htop wget curl git tmux \
numlockx kitty neovim xdg-utils cups cups-common lm-sensors fancontrol xbacklight brightnessctl unzip network-manager \
dnsutils dunst libnotify-bin notify-osd xsecurelock pm-utils rofi 7zip jq poppler-utils fd-find ripgrep zoxide sddm \
imagemagick nsxiv mpv flameshot mc thunar gvfs gvfs-backends parted gparted mpd mpc ncmpcpp fzf ccrypt xarchiver \
notepadqq font-manager fontconfig fontconfig-config fonts-recommended fonts-liberation fonts-freefont-ttf \
fonts-noto-core libfontconfig1 pipewire pipewire-audio pipewire-alsa pipewire-pulse pipewire-jack wireplumber \
libspa-0.2-bluetooth pavucontrol alsa-utils qpwgraph sddm-theme-breeze sddm-theme-maui ffmpeg cmake \
policykit-1-gnome remmina libreoffice keynav
sudo chmod -R +r iso-extract/var/
make
}
# Make a new ISO file after removing the old one if it exists.
function make() {
if [ -d $ISO_WORK_TMP ]; then
if [ -f $PRESEED_ISO_NAME.iso ]; then rm $PRESEED_ISO_NAME.iso; fi
xorriso -as mkisofs -o $PRESEED_ISO_NAME.iso -V "Debian QMADE" -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat $ISO_WORK_TMP
ls -lah ./*.iso
else
echo "$ISO_WORK_TMP does not exist, runing setup..."
setup
fi
}
function usb() {
lsblk
echo -en "Enter the name of the USB Disk so sda, sdb etc..: "
read -r USB_DISK
clear
sudo dd bs=4M status=progress conv=fsync oflag=direct if="$(pwd)"/$PRESEED_ISO_NAME.iso of=/dev/"$USB_DISK"
echo "ISO to USB All done."
}
# Run the function by, function_name
"$@" make

Binary file not shown.

View File

@@ -0,0 +1,13 @@
#!/usr/bin/env bash
wal --cols16 darken -q -i ~/Wallpapers --backend colorz --saturate 0.25 --contrast 20
# Backends: colorz, haishoku, wal, colorthief, fast_colorthief, okthief, schemer2, modern_colorthief
notify-send -u low "Automatically new background and color theme" "Please wait while i find a new background image and some colors to match"
qtile cmd-obj -o cmd -f reload_config
kitty +kitten themes --reload-in=all Current-theme
cp $(cat "$HOME/.cache/wal/wal") /usr/share/wallpapers/login-wallpape.jpg
notify-send -u low "Automatically new background and color theme" "The background image and colors has been updated."

50
src/usr/bin/iso-to-usb Executable file
View File

@@ -0,0 +1,50 @@
#!/usr/bin/env bash
# Script to write an ISO to a USB drive using dd
# Check if input and output are provided
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Usage: $0 <iso_file> <usb_drive>"
echo " <iso_file>: Path to the ISO file you want to write."
echo " <usb_drive>: Device NAME of the USB drive (e.g., sda, sdb)."
echo " **WARNING:** This will erase all data on the USB drive!"
lsblk
ls -lh
exit 1
fi
# Check if the ISO file exists
if [ ! -f "$1" ]; then
echo "Error: ISO file '$1' not found."
ls -lh
exit 1
fi
# Check if the USB drive exists
if [ ! -b "/dev/$2" ]; then
echo "Error: USB drive '$2' not found or is not a block device."
echo "Make sure you're using the correct device NAME (e.g., sda, sdb)."
lsblk
exit 1
fi
# Confirm with the user before proceeding
read -p "Are you sure you want to write '$1' to '$2'? This will erase all data on the USB drive. (y/n): " confirm
if [[ "$confirm" != "y" ]]; then
echo "Aborted."
exit 0
fi
# Execute the dd command
echo "Writing '$1' to '$2'..."
sudo dd bs=4M status=progress conv=fsync oflag=direct if="$1" of="/dev/$2"
# Check the exit code of the dd command
if [ $? -eq 0 ]; then
echo "Write complete."
else
echo "Write failed. Check for errors."
fi
#exit 0

View File

@@ -0,0 +1,3 @@
Section "ServerFlags"
Option "IgnoreABI" "true"
EndSection