Compare commits

...
Sign in to create a new pull request.

97 commits

Author SHA1 Message Date
eeleater
bfaf29559c removed some vms from vm host 2025-04-15 10:11:04 +02:00
Nikolas Weger
9900b3495a disabled jetbrains in topgrade 2025-04-04 08:05:19 +02:00
eeleater
4cf0731971 fixed scp completion 2025-04-03 07:19:10 +02:00
eeleater
f87806f09b disabled bun packages in topgrade 2025-03-28 17:48:10 +01:00
eeleater
4f189ca947 disabled bun in topgrade 2025-03-28 17:47:17 +01:00
eeleater
c9dcf78621 disabled helm and certbot in topgrade 2025-03-28 17:46:17 +01:00
eeleater
084b99c673 fixed the ssh plugin to only be loaded on laptop 2025-03-25 20:33:44 +01:00
eeleater
8f8e94aad4 add scanKeys function to wrap ssh-scankeys 2025-03-25 06:42:45 +01:00
eeleater
2098d0fc35 removed unnecessary sshcomp.zsh 2025-03-24 17:25:46 +01:00
eeleater
3b2f16d6b7 fixed the long lines of the omp config 2025-03-24 17:24:38 +01:00
eeleater
d310fd8f9b added new, better ssh functionality 2025-03-24 16:26:14 +01:00
eeleater
0d02d90080 added new, better ssh functionality 2025-03-24 16:06:07 +01:00
eeleater
0c40dca11f added deployWebsite script, add new server to topgrade config 2025-03-21 12:33:43 +01:00
eeleater
8af7933444 added path for composer global 2025-02-26 06:48:58 +01:00
Nikolas Weger
2d95bf3e47 changed kitty font size for hyprland on 4k screen 2025-01-14 09:50:36 +01:00
eeleater
238b8d95fd change omp config to web download 2025-01-03 01:51:34 +01:00
Nikolas Weger
9f697505bc changed directory for override files 2024-12-16 06:55:55 +01:00
Nikolas Weger
f225beb9a0 changed kitty theme back to dracula 2024-12-10 10:20:59 +01:00
eeleater
d742874280 add uptime server to topgrade remotes 2024-12-09 09:15:23 +01:00
eeleater
683e7dc4ad infra is back as ubuntu server 2024-11-30 00:15:13 +01:00
eeleater
b912fb35e8 fixed mise eval always getting cached 2024-11-29 17:13:55 +01:00
eeleater
65c7594d29 added yazi function and keybind 2024-11-26 01:48:51 +01:00
eeleater
862f5d119b redelete unneeded files 2024-11-25 01:51:23 +01:00
16dde8776a revert 9c0a4ea635
revert fixed chezmoi on phone
2024-11-25 01:49:26 +01:00
36bb6c8e29 revert b0910ee44c
revert actually fixed chezmoi on phone
2024-11-25 01:49:10 +01:00
eeleater
b0910ee44c actually fixed chezmoi on phone 2024-11-25 01:40:08 +01:00
eeleater
9c0a4ea635 fixed chezmoi on phone 2024-11-25 00:57:12 +01:00
eeleater
572e061f63 new theme and font for kitty 2024-11-23 00:38:31 +01:00
eeleater
4901b0dc88 workaround not needed, fixed in zellij 2024-11-17 23:23:17 +01:00
eeleater
9d6e70836f workaround not needed, fixed in zellij 2024-11-17 23:16:08 +01:00
Nikolas Weger
5411399bf5 fixed keybind for fzfmarks, collision with zellij 2024-11-11 08:47:28 +01:00
Nikolas Weger
58bb07fa67 fixed keybind for fzfmarks, collision with zellij 2024-11-11 08:45:58 +01:00
Nikolas Weger
01a037cdcc updated oh-my-posh script because --version is no longer valid 2024-11-06 11:51:59 +01:00
Nikolas Weger
2eb1adeed6 fixed zellij layout script 2024-10-23 12:15:24 +02:00
Nikolas Weger
e7322f20a9 removed infra from remote topgrades, because it is now nixos 2024-10-23 12:14:13 +02:00
80f53863a2 dot_local/bin/executable_joke aktualisiert 2024-10-06 13:02:53 +02:00
eeleater
7bb3c1e96e added findfile function 2024-10-04 01:46:37 +02:00
Nikolas Weger
a262841172 fixed zshenv editor export 2024-10-02 10:28:10 +02:00
Nikolas Weger
e5eb6ae909 fixed zshrc on other systems, mise not installed 2024-10-02 10:25:09 +02:00
eeleater
887b73a6c5 remove asdf, add mise 2024-09-30 07:29:21 +02:00
eeleater
41cec2dfa6 updated zellij scripts 2024-09-29 20:36:15 +02:00
eeleater
fd47b9e969 added two scripts for zellij 2024-09-27 19:01:08 +02:00
eeleater
9d21258b7b updated antidote 2024-09-24 14:46:04 +02:00
eeleater
b19c47e146 updated antidote 2024-09-24 14:39:05 +02:00
eeleater
62a7bcc139 updated antidote 2024-09-24 14:37:34 +02:00
eeleater
7197e4c27c set zellij to autostart on ssh connection 2024-09-24 14:28:05 +02:00
eeleater
9cbe200c92 removed docker vm from vm host 2024-09-13 11:35:43 +02:00
eeleater
be8b4ff00b updated antidote 2024-09-11 15:31:35 +02:00
eeleater
f645247321 updated antidote 2024-08-22 11:11:28 +02:00
eeleater
d2b2840b29 updated antidote 2024-08-21 23:08:24 +02:00
eeleater
0a6161e933 updated antidote 2024-08-21 22:13:17 +02:00
Nikolas Weger
aa0d605833 added kubernetes server to topgrade 2024-08-20 08:07:14 +02:00
eeleater
6adfd4a06a Merge branch 'antidote' of git.eeleater.org:eeleater/dotfiles into antidote 2024-08-19 09:51:46 +02:00
eeleater
a2bd1ac7b1 updated antidote 2024-08-19 09:51:34 +02:00
Nikolas Weger
8f2c831aff changed ssh completion somewhat 2024-08-19 08:24:01 +02:00
eeleater
ce6152613c updated antidote in prep for usage on laptop 2024-08-16 00:19:33 +02:00
eeleater
b111001de3 updated antidote in prep for usage on laptop 2024-08-16 00:07:37 +02:00
eeleater
48b4d418af updated antidote in prep for usage on laptop 2024-08-16 00:02:15 +02:00
eeleater
ef46d0e0a0 updated antidote in prep for usage on laptop 2024-08-15 23:25:11 +02:00
eeleater
4dce77ed89 updated antidote from sheldon 2024-08-14 00:45:29 +02:00
eeleater
863808c00d updated antidote from sheldon 2024-08-14 00:45:09 +02:00
eeleater
0ed285bef9 updated antidote 2024-08-12 18:54:30 +02:00
eeleater
6e3aa32622 updated antidote 2024-08-11 23:19:17 +02:00
eeleater
62ea83b28b updated antidote 2024-08-11 23:15:51 +02:00
eeleater
376f09760e removed difftool meld when no gui is available anyway 2024-02-25 21:31:52 +01:00
eeleater
1a33b9127c removed colorscript where its not installed anyway 2024-02-25 21:29:36 +01:00
eeleater
5e8eee53e8 Update aliases.zsh 2024-02-05 16:05:17 +00:00
Nikolas Weger
cdc7df962b updated antidote config to newest 2024-01-25 09:51:34 +01:00
Nikolas Weger
1f9d47b42c newest version of dotfiles 2023-12-19 13:31:14 +01:00
eeleater
4e44332045 removed some vms from vm host 2023-12-04 08:47:10 +01:00
eeleater
62f50b0e92 removed some vms from vm host 2023-11-30 08:51:35 +01:00
eeleater
e55117b383 removed some vms from vm host 2023-11-29 21:03:49 +01:00
c7ec08f21e fixed diffprog error 2023-11-20 11:27:16 +01:00
eeleater
4cc57f4ad2 eza plugin got updated, remove workaround 2023-11-20 09:59:50 +01:00
eeleater
48cdc07fe0 changed some stuff 2023-11-19 23:24:23 +01:00
eeleater
8ceb1be386 changed some stuff 2023-11-09 09:18:57 +01:00
eeleater
16e4580f1c changed some stuff 2023-11-06 12:16:28 +01:00
eeleater
8fd767105f changed some stuff 2023-11-06 12:12:20 +01:00
eeleater
30606208d4 Update topgrade.toml 2023-10-24 08:20:02 +00:00
eeleater
576ffc0f9d Update topgrade.toml 2023-10-24 08:19:29 +00:00
eeleater
cee9b26d04 fixed topgrade.toml 2023-10-24 10:15:26 +02:00
d0a543e810 changed topgrade.toml 2023-10-23 23:20:41 +02:00
eeleater
b48b961733 Update .chezmoiexternal.toml 2023-10-06 04:27:11 +00:00
eeleater
60f4095748 updated antidote 2023-10-05 15:18:13 +02:00
eeleater
f1ed7f6496 updated antidote 2023-10-05 15:14:21 +02:00
eeleater
6100d79be7 Update dot_zshrc 2023-10-05 07:56:33 +00:00
eeleater
0474f8878a Update dot_zshrc 2023-10-05 07:56:18 +00:00
eeleater
1f9f405d48 Update dot_zshrc 2023-10-04 17:24:27 +00:00
Nikolas Weger
f7cb8e5949 updated antidote to newest state 2023-09-28 12:18:38 +02:00
6d40f3fa63 moved env.zsh to private repo 2023-05-02 00:21:54 +02:00
1f04c5b3d8 moved env.zsh to private repo 2023-05-02 00:19:50 +02:00
c4637f4ff1 updated antidote config somewhat 2023-05-01 00:10:37 +02:00
88a9903375 updated antidote config somewhat 2023-05-01 00:07:57 +02:00
80f14c3aee updated antidote config somewhat 2023-05-01 00:01:24 +02:00
5ade9a740d updated antidote config somewhat 2023-04-30 23:20:43 +02:00
933ac6a5c9 updated antidote config somewhat 2023-04-30 23:18:42 +02:00
ba8cf2c09f updated antidote config somewhat 2023-04-30 23:09:06 +02:00
72 changed files with 658 additions and 1964 deletions

10
.chezmoi.toml.tmpl Normal file
View file

@ -0,0 +1,10 @@
{{ $email := promptString "email" -}}
{{ $username := promptString "username" -}}
[git]
autoCommit = true
autoPush = true
[data]
email = {{ $email | quote }}
name = {{ $username | quote }}

View file

@ -1,162 +0,0 @@
env:
TERM: xterm-256color
window:
padding:
x: 4
y: 4
title: Alacritty
class:
instance: Alacritty
general: Alacritty
opacity: 0.95
scrolling:
history: 20000
font:
normal:
family: FiraCode Nerd Font
style: Regular
bold:
family: FiraCode Nerd Font
style: Bold
italic:
family: FiraCode Nerd Font
style: Italic
bold_italic:
family: FiraCode Nerd Font
style: Bold Italic
size: 7.5
schemes:
onedark: &onedark
primary:
background: '#282c34'
foreground: '#abb2bf'
normal:
black: '#131613'
red: '#e06c75'
green: '#98c379'
yellow: '#d19a66'
blue: '#61afef'
magenta: '#c678dd'
cyan: '#56b6c2'
white: '#abb2bf'
bright:
black: '#5c6370'
red: '#e06c75'
green: '#98c379'
yellow: '#d19a66'
blue: '#61afef'
magenta: '#c678dd'
cyan: '#56b6c2'
white: '#ffffff'
ayudark: &ayudark
primary:
background: '#0A0E14'
foreground: '#B3B1AD'
normal:
black: '#01060E'
red: '#EA6C73'
green: '#91B362'
yellow: '#F9AF4F'
blue: '#53BDFA'
magenta: '#FAE994'
cyan: '#90E1C6'
white: '#C7C7C7'
bright:
black: '#686868'
red: '#F07178'
green: '#C2D94C'
yellow: '#FFB454'
blue: '#59C2FF'
magenta: '#FFEE99'
cyan: '#95E6CB'
white: '#FFFFFF'
nord: &nord
primary:
background: '#2e3440'
foreground: '#d8dee9'
dim_foreground: '#a5abb6'
cursor:
text: '#2e3440'
cursor: '#d8dee9'
vi_mode_cursor:
text: '#2e3440'
cursor: '#d8dee9'
selection:
text: CellForeground
background: '#4c566a'
search:
matches:
foreground: CellBackground
background: '#88c0d0'
footer_bar:
background: '#434c5e'
foreground: '#d8dee9'
normal:
black: '#3b4252'
red: '#bf616a'
green: '#a3be8c'
yellow: '#ebcb8b'
blue: '#81a1c1'
magenta: '#b48ead'
cyan: '#88c0d0'
white: '#e5e9f0'
bright:
black: '#4c566a'
red: '#bf616a'
green: '#a3be8c'
yellow: '#ebcb8b'
blue: '#81a1c1'
magenta: '#b48ead'
cyan: '#8fbcbb'
white: '#eceff4'
dim:
black: '#373e4d'
red: '#94545d'
green: '#809575'
yellow: '#b29e75'
blue: '#68809a'
magenta: '#8c738c'
cyan: '#6d96a5'
white: '#aeb3bb'
colors: *nord
shell:
program: /usr/bin/zsh
args:
- --login
key_bindings:
- { key: V, mods: Control|Shift, action: Paste }
- { key: C, mods: Control|Shift, action: Copy }
- { key: L, mods: Control, action: ClearLogNotice }
- { key: L, mods: Control, chars: "\x0c" }
- { key: PageUp, mods: Shift, action: ScrollPageUp, mode: ~Alt }
- { key: PageDown, mods: Shift, action: ScrollPageDown, mode: ~Alt }
- { key: Home, mods: Shift, action: ScrollToTop, mode: ~Alt }
- { key: End, mods: Shift, action: ScrollToBottom, mode: ~Alt }

View file

@ -1,78 +0,0 @@
tap "homebrew/bundle"
tap "homebrew/command-not-found"
tap "homebrew/core"
tap "homebrew/services"
tap "kdabir/tap"
tap "msoap/tools"
tap "xwmx/taps"
tap "yxdunc/tools"
brew "asciinema"
brew "perl"
brew "asdf"
brew "bat"
brew "brotli"
brew "node"
brew "gettext"
brew "bitwarden-cli"
brew "bottom"
brew "bpytop"
brew "cheat"
brew "chezmoi"
brew "choose-rust"
brew "util-linux"
brew "curlie"
brew "direnv"
brew "dog"
brew "duf"
brew "dust"
brew "libgit2"
brew "exa"
brew "fd"
brew "llvm"
brew "gh"
brew "git-delta"
brew "glances"
brew "grex"
brew "gron"
brew "hexyl"
brew "httpie"
brew "hub"
brew "hyperfine"
brew "ipinfo-cli"
brew "jc"
brew "jq"
brew "lf"
brew "lnav"
brew "lsd"
brew "mcfly"
brew "miller"
brew "name-that-hash"
brew "navi"
brew "nmap"
brew "ripgrep"
brew "w3m"
brew "nb"
brew "nghttp2"
brew "procs"
brew "pywhat"
brew "ranger"
brew "rm-improved"
brew "rust"
brew "scc"
brew "sd"
brew "shellcheck"
brew "spark"
brew "speedtest-cli"
brew "starship"
brew "tokei"
brew "up"
brew "viddy"
brew "wget"
brew "wgetpaste"
brew "whalebrew"
brew "xh"
brew "xsv"
brew "zoxide"
brew "kdabir/tap/has"
brew "msoap/tools/shell2http"
brew "yxdunc/tools/lipl"

View file

@ -1,32 +1,35 @@
# One Dark by Giuseppe Cesarano, https://github.com/GiuseppeCesarano # vim:ft=kitty
# This work is licensed under the terms of the GPL-2.0 license. ## name: Dracula
# For a copy, see https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html. ## author: Keegan Carruthers-Smith
## license: MIT
## upstream: https://raw.githubusercontent.com/dracula/kitty/master/dracula.conf
# Colors foreground #f8f8f2
background #282a36
foreground #979eab selection_foreground #ffffff
background #282c34 selection_background #44475a
url_color #8be9fd
color0 #282c34 color0 #21222c
color1 #e06c75 color8 #6272a4
color2 #98c379 color1 #ff5555
color3 #e5c07b color9 #ff6e6e
color4 #61afef color2 #50fa7b
color5 #be5046 color10 #69ff94
color6 #56b6c2 color3 #f1fa8c
color7 #979eab color11 #ffffa5
color8 #393e48 color4 #bd93f9
color9 #d19a66 color12 #d6acff
color10 #56b6c2 color5 #ff79c6
color11 #e5c07b color13 #ff92df
color12 #61afef color6 #8be9fd
color13 #be5046 color14 #a4ffff
color14 #56b6c2 color7 #f8f8f2
color15 #abb2bf color15 #ffffff
cursor #f8f8f2
# Tab Bar cursor_text_color background
active_tab_foreground #282a36
active_tab_foreground #282c34 active_tab_background #f8f8f2
active_tab_background #979eab inactive_tab_foreground #282a36
inactive_tab_foreground #abb2bf inactive_tab_background #6272a4
inactive_tab_background #282c34 mark1_foreground #282a36
mark1_background #ff5555

View file

@ -4,12 +4,12 @@ copy_on_select no
strip_trailing_spaces smart strip_trailing_spaces smart
window_padding_width 5 window_padding_width 5
enable_audio_bell no enable_audio_bell no
shell_integration enabled
# Fonts # Fonts
font_family FiraCode Nerd Font font_family 0xproto Nerd Font
font_size 13
# BEGIN_KITTY_THEME # BEGIN_KITTY_THEME
# One Dark # Dracula
include current-theme.conf include current-theme.conf
# END_KITTY_THEME # END_KITTY_THEME

View file

@ -1,38 +0,0 @@
from libqtile import bar, widget
from colors import colors
def base(fg='foreground', bg='background'):
return { 'foreground': colors[fg], 'background': colors[bg] }
widget_defaults = {
'font': 'FiraCode Mono Nerd Font',
'fontsize': 12,
'padding': 5,
'foreground': colors['black'],
'background': colors['background']
}
group_box = {
'fontsize': 28,
'active': colors['purple'],
'inactive': colors['purple'],
'highlight_method': 'line',
'this_current_screen_border': colors['green']
}
green = { 'background': colors['green'] }
yellow = { 'background': colors['yellow'] }
widgets_list = [
widget.GroupBox(**group_box),
widget.WindowName(**base(fg='yellow')),
widget.Memory(**yellow),
widget.Battery(**green),
widget.Volume(**yellow),
widget.CapsNumLockIndicator(**green),
widget.CurrentLayout(**yellow),
widget.Clock(format='%A, %B %d (%T)', **green),
widget.Systray()
]
top = bar.Bar(widgets_list, 30)

View file

@ -1,9 +0,0 @@
import json
import os
theme = 'nord'
user = os.path.expanduser('~')
with open(user + "/.config/qtile/themes/" + theme + ".json") as theme_json:
colors = json.load(theme_json)

View file

@ -1,15 +0,0 @@
import subprocess
import os
from libqtile import hook
from keys import keys
from groups import groups
from screens import screens
from bars import widget_defaults
from layouts import layouts, floating_layout
#@hook.subscribe.startup_once
# def start_once():
# user = os.path.expanduser('~')
# subprocess.call([user + '/.config/qtile/scripts/autostart.sh'])

View file

@ -1,20 +0,0 @@
from libqtile.config import Group, ScratchPad, DropDown
group_names = [
("WWW", {'layout': 'treetab', 'label': ''}),
("DEV", {'layout': 'monadtall', 'label': ''}),
("SYS", {'layout': 'treetab', 'label': ''}),
("VMS", {'layout': 'monadtall', 'label': ''}),
("DOC", {'layout': 'monadtall', 'label': ''}),
("IRC", {'layout': 'monadtall', 'label': ''}),
("MUS", {'layout': 'monadtall', 'label': ''}),
("VID", {'layout': 'monadtall', 'label': ''}),
("GFX", {'layout': 'floating', 'label': ''})
]
terminals = [
DropDown("term", "kitty", height = 0.65, width = 0.85, warp_pointer = False)
]
groups = [Group(name, **kwargs) for name, kwargs in group_names]
groups.append(ScratchPad("DRP", dropdowns = terminals))

View file

@ -1,62 +0,0 @@
from libqtile.config import Key, Drag, Click
from libqtile.lazy import lazy
from groups import group_names
mod = ["mod4"]
modshift = ["mod4", "shift"]
modctrl = ["mod4", "control"]
ctrl = ["control"]
keys = [
# Standard Controls
Key(modshift, "d", lazy.window.kill(), desc='kill active window'),
Key(modctrl, "r", lazy.restart(), desc='reload qtile config'),
Key(modctrl, "l", lazy.spawn('xdg-screensaver lock'), desc='lock screen'),
Key(modshift, "q", lazy.spawn('rofi -show p -modi p:rofi-power-menu'), desc="shutdown menu"),
Key(mod, "Tab", lazy.spawn('rofi -show window'), desc='window menu'),
# Treetab controls
Key(modctrl, "Up", lazy.layout.section_up(), desc='Move up a section in treetab'),
Key(modctrl, "Down", lazy.layout.section_down(), desc='Move down a section in treetab'),
# Window controls
Key(mod, "Up", lazy.layout.up(), desc='Move focus up in current stack pane'),
Key(mod, "Down", lazy.layout.down(), desc='Move focus down in current stack pane'),
Key(mod, "Left", lazy.layout.shrink(), lazy.layout.decrease_nmaster(), desc='Shrink window (MonadTall), decrease number in master pane (Tile)'),
Key(mod, "Right", lazy.layout.grow(), lazy.layout.increase_nmaster(), desc='Expand window (MonadTall), increase number in master pane (Tile)'),
Key(modshift, "Down", lazy.layout.shuffle_down(), desc='Move windows down in current stack'),
Key(modshift, "Up", lazy.layout.shuffle_up(), desc='Move windows up in current stack'),
Key(modctrl, "f", lazy.window.toggle_floating(), desc='toggle floating'),
Key(mod, "n", lazy.layout.normalize(), desc='normalize window size ratios'),
Key(mod, "m", lazy.layout.maximize(), desc='toggle window between minimum and maximum sizes'),
# Stack controls
Key(modshift, "space", lazy.layout.rotate(), lazy.layout.flip(), desc='Switch which side main pane occupies (XmonadTall)'),
Key(mod, "space", lazy.layout.next(), desc='Switch window focus to other pane(s) of stack'),
Key(modctrl, "Return", lazy.layout.toggle_split(), desc='Toggle between split and unsplit sides of stack'),
# run programs
Key(mod, "Return", lazy.spawn('rofi -show drun'), desc='launcher'),
Key(modshift, "r", lazy.spawn('pcmanfm'), desc='filebrowser'),
Key(modshift, "p", lazy.spawn('bwmenu'), desc='passwordmenu'),
Key(ctrl, "space", lazy.group["DRP"].dropdown_toggle("term")),
# sound + brightness
Key([], "XF86AudioMute", lazy.spawn('pactl set-sink-mute @DEFAULT_SINK@ toggle')),
Key([], "XF86AudioMicMute", lazy.spawn('pactl set-source-mute @DEFAULT_SOURCE@ toggle')),
Key([], "XF86AudioLowerVolume", lazy.spawn('pactl set-sink-volume @DEFAULT_SINK@ -5%')),
Key([], "XF86AudioRaiseVolume", lazy.spawn('pactl set-sink-volume @DEFAULT_SINK@ +5%')),
Key([], "XF86MonBrightnessUp", lazy.spawn('brightnessctl set +10%')),
Key([], "XF86MonBrightnessDown", lazy.spawn('brightnessctl set 10%-'))
]
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())
]
for i, (name, kwargs) in enumerate(group_names, 1):
keys.append(Key(mod, str(i), lazy.group[name].toscreen()))
keys.append(Key(modshift, str(i), lazy.window.togroup(name)))

View file

@ -1,53 +0,0 @@
from libqtile import layout
from libqtile.config import Match
from colors import colors
layout_theme = {
"border_width": 1,
"margin": 5,
"border_focus": colors['green'],
"border_normal": colors['cyan']
}
treetab_layout = {
"font": "FiraCode Nerd Font",
"fontsize": 10,
"sections": [""],
"section_fontsize": 8,
"bg_color": colors['background'],
"active_bg": colors['foreground'],
"active_fg": colors['background'],
"inactive_bg": colors['background'],
"inactive_fg": colors['white'],
"padding_y": 5,
"section_top": 10,
"panel_width": 100
}
layouts = [
# layout.MonadWide(**layout_theme),
# layout.Bsp(**layout_theme),
# layout.Stack(num_stacks=2, **layout_theme),
# layout.Columns(**layout_theme),
# layout.RatioTile(**layout_theme),
# layout.VerticalTile(**layout_theme),
# layout.Matrix(**layout_theme),
layout.MonadTall(**layout_theme),
# layout.Max(**layout_theme),
# layout.Tile(shift_windows=True, **layout_theme),
layout.TreeTab(**treetab_layout),
layout.Floating(**layout_theme)
]
floatrules = [
*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
]
floating_layout = layout.Floating(float_rules = floatrules, border_width = 0)

View file

@ -1,170 +0,0 @@
import json
import subprocess
from libqtile import layout, bar, widget, hook
from libqtile.command import lazy
from libqtile.config import Key, Screen, Group, Drag, Click
@hook.subscribe.startup_once
def start_once():
subprocess.call(['/home/eeleater/.config/qtile/scripts/autostart.sh'])
terminal = "kitty"
mod = ["mod4"]
modshift = ["mod4", "shift"]
modctrl = ["mod4", "control"]
keys = [
# Standard Controls
Key(modshift, "d", lazy.window.kill(), desc='kill active window'),
Key(modctrl, "r", lazy.restart(), desc='reload qtile config'),
Key(modctrl, "l", lazy.spawn("xdg-screensaver lock"), desc='lock screen'),
Key(modshift, "q", lazy.spawn("rofi -show p -modi p:rofi-power-menu"), desc="shutdown menu"),
Key(mod, "Tab", lazy.spawn("rofi -show window"), desc='window menu'),
# Treetab controls
Key(modctrl, "Up", lazy.layout.section_up(), desc='Move up a section in treetab'),
Key(modctrl, "Down", lazy.layout.section_down(), desc='Move down a section in treetab'),
# Window controls
Key(mod, "Up", lazy.layout.up(), desc='Move focus up in current stack pane'),
Key(mod, "Down", lazy.layout.down(), desc='Move focus down in current stack pane'),
Key(mod, "Left", lazy.layout.shrink(), lazy.layout.decrease_nmaster(), desc='Shrink window (MonadTall), decrease number in master pane (Tile)'),
Key(mod, "Right", lazy.layout.grow(), lazy.layout.increase_nmaster(), desc='Expand window (MonadTall), increase number in master pane (Tile)'),
Key(modshift, "Down", lazy.layout.shuffle_down(), desc='Move windows down in current stack'),
Key(modshift, "Up", lazy.layout.shuffle_up(), desc='Move windows up in current stack'),
Key(modctrl, "f", lazy.window.toggle_floating(), desc='toggle floating'),
Key(mod, "n", lazy.layout.normalize(), desc='normalize window size ratios'),
Key(mod, "m", lazy.layout.maximize(), desc='toggle window between minimum and maximum sizes'),
# Stack controls
Key(modshift, "space", lazy.layout.rotate(), lazy.layout.flip(), desc='Switch which side main pane occupies (XmonadTall)'),
Key(mod, "space", lazy.layout.next(), desc='Switch window focus to other pane(s) of stack'),
Key(modctrl, "Return", lazy.layout.toggle_split(), desc='Toggle between split and unsplit sides of stack'),
# run programs
Key(mod, "Return", lazy.spawn(terminal + ' --single-instance'), desc='terminal'),
Key(modshift, "Return", lazy.spawn("rofi -show drun"), desc='launcher'),
Key(modshift, "r", lazy.spawn("pcmanfm"), desc='filebrowser'),
Key(modshift, "p", lazy.spawn("bwmenu"), desc='passwordmenu'),
# sound + brightness
Key([], "XF86AudioMute", lazy.spawn("pactl set-sink-mute @DEFAULT_SINK@ toggle")),
Key([], "XF86AudioMicMute", lazy.spawn("pactl set-source-mute @DEFAULT_SOURCE@ toggle")),
Key([], "XF86AudioLowerVolume", lazy.spawn("pactl set-sink-volume @DEFAULT_SINK@ -5%")),
Key([], "XF86AudioRaiseVolume", lazy.spawn("pactl set-sink-volume @DEFAULT_SINK@ +5%")),
Key([], "XF86MonBrightnessUp", lazy.spawn("brightnessctl set +10%")),
Key([], "XF86MonBrightnessDown", lazy.spawn("brightnessctl set 10%-"))
]
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())
]
# GROUPS
group_names = [
("WWW", {'layout': 'treetab', 'label': ''}),
("DEV", {'layout': 'monadtall', 'label': ''}),
("SYS", {'layout': 'monadtall', 'label': ''}),
("VMS", {'layout': 'monadtall', 'label': ''}),
("DOC", {'layout': 'monadtall', 'label': ''}),
("IRC", {'layout': 'monadtall', 'label': ''}),
("MUS", {'layout': 'monadtall', 'label': ''}),
("VID", {'layout': 'monadtall', 'label': ''}),
("GFX", {'layout': 'floating', 'label': ''})
]
groups = [Group(name, **kwargs) for name, kwargs in group_names]
for i, (name, kwargs) in enumerate(group_names, 1):
keys.append(Key(mod, str(i), lazy.group[name].toscreen()))
keys.append(Key(modshift, str(i), lazy.window.togroup(name)))
# LAYOUTS
layout_theme = {"border_width": 1, "margin": 5, "border_focus": "53bdfa", "border_normal": "01060e"}
treetab_layout = {
"font": "FiraCode Nerd Font",
"fontsize": 10,
"sections": [""],
"section_fontsize": 8,
"bg_color": "141414",
"active_bg": "90C435",
"active_fg": "000000",
"inactive_bg": "384323",
"inactive_fg": "a0a0a0",
"padding_y": 5,
"section_top": 10,
"panel_width": 100
}
layouts = [
# layout.MonadWide(**layout_theme),
# layout.Bsp(**layout_theme),
# layout.Stack(num_stacks=2, **layout_theme),
# layout.Columns(**layout_theme),
# layout.RatioTile(**layout_theme),
# layout.VerticalTile(**layout_theme),
# layout.Matrix(**layout_theme),
layout.MonadTall(**layout_theme),
# layout.Max(**layout_theme),
# layout.Tile(shift_windows=True, **layout_theme),
layout.TreeTab(**treetab_layout),
layout.Floating(**layout_theme)
]
# COLORS
theme = 'hopscotch'
with open("/home/eeleater/.config/qtile/themes/" + theme + ".json") as theme_json:
colors = json.load(theme_json)
def base(fg='foreground', bg='background'):
return {'foreground': colors[fg], 'background': colors[bg]}
# DEFAULTS
widget_defaults = {'font': 'FiraCode Mono Nerd Font', 'fontsize': 12, 'padding': 5, 'foreground': colors['black'], 'background': colors['background']}
extension_defaults = widget_defaults.copy()
group_box = {
'fontsize': 25,
'active': colors['purple'],
'inactive': colors['purple'],
'highlight_method': 'line',
'this_current_screen_border': colors['green']
}
pacman = { 'update_interval': 1800 }
clock = { 'format': '%A, %B %d (%T)' }
wid_bg_one = { 'background': colors['green'] }
wid_bg_two = { 'background': colors['yellow'] }
widgets_list = [
widget.GroupBox(**group_box),
widget.WindowName(**base(fg='yellow')),
widget.Pacman(**pacman, **wid_bg_one),
widget.TextBox(text="Updates", **wid_bg_one),
widget.Memory(**wid_bg_two),
widget.Battery(**wid_bg_one),
widget.Volume(**wid_bg_two),
widget.CapsNumLockIndicator(**wid_bg_one),
widget.CurrentLayout(**wid_bg_two),
widget.Clock(**wid_bg_one, **clock),
widget.Systray()
]
screens = [Screen(top=bar.Bar(widgets_list, 25))]
floating_layout = layout.Floating(float_rules=[
{'wmclass': 'confirm'}, {'wmclass': 'dialog'},
{'wmclass': 'download'}, {'wmclass': 'error'},
{'wmclass': 'file_progress'}, {'wmclass': 'notification'},
{'wmclass': 'splash'}, {'wmclass': 'toolbar'},
{'wmclass': 'confirmreset'}, {'wmclass': 'makebranch'},
{'wmclass': 'maketag'}, {'wmclass': 'ssh-askpass'},
{'wmclass': 'microsoft teams - preview'},
{'wname': 'branchdialog'}, {'wname': 'pinentry-gtk-2'},
{'wname': 'pinentry'}, {'wname': 'Welcome to PyCharm'},
{'wname': 'Kali'}
])

View file

@ -1,127 +0,0 @@
from pathlib import Path
from libqtile import bar, widget
from colors import theme, border_color
icon_theme_path = Path.home() / '{{ icon_dir | replace(user_dir + '/', '') }}'
bar_size = 36
groupbox = {
'center_aligned': True,
'foreground': theme['very_light_white'],
'inactive': theme['gray'],
'other_current_screen_border': theme['gray'],
'this_current_screen_border': theme['dark_blue'],
'this_screen_border': theme['dark_blue'],
'urgent_border': theme['red'],
'urgent_text': theme['red']}
sep = {
'linewidth': 2,
'size_percent': 100,
'padding': 12}
soft_sep = {
'linewidth': 2,
'size_percent': 70,
'foreground': theme['dark_gray'],
'padding': 7}
tasklist = {
'border': border_color,
'max_title_width': 200,
'txt_floating': '🗗',
'txt_maximized': '🗖',
'txt_minimized': '🗕'}
volume = {'theme_path': icon_theme_path}
clock = {
'timezone': 'Europe/Paris',
'format': '%B %-d, %H:%M'}
music = widget.Mpris2(
background=theme['dark_blue'],
name='spotify',
scroll_chars=0,
stop_pause_text='',
display_metadata=['xesam:title', 'xesam:artist'],
objname="org.mpris.MediaPlayer2.spotify")
disk = widget.DF(
update_interval=3600,
warn_space=5,
format='{p} ({uf}{m})')
updates = widget.CheckUpdates(
distro='Arch_checkupdates',
display_format='{updates}',
execute='termite -e "pikaur -Syu"',
colour_have_updates=theme['dark_blue'],
colour_no_updates=theme['dark_green'],
update_interval=600)
battery = widget.Battery(
foreground=theme['green'],
low_percentage=0.10,
low_foreground=theme['red'],
update_delay=10,
format='{percent:.0%} {hour:d}:{min:02d} {watt:.2}W')
battery_icon = widget.BatteryIcon(
theme_path=icon_theme_path,
update_interval=120)
systray = widget.Systray(
icon_size=24
)
main_bar = bar.Bar(
[
widget.GroupBox(**groupbox, visible_groups=['a', 's', 'd', 'f',
'music', 'chat', 'game']),
widget.Sep(**sep),
widget.Volume(**volume),
music,
widget.TaskList(**tasklist),
systray,
widget.Sep(**sep),
disk,
updates,
widget.Sep(**soft_sep),
battery_icon,
battery,
widget.Sep(**soft_sep),
widget.Clock(**clock),
], bar_size)
bar1 = bar.Bar(
[
widget.GroupBox(**groupbox, visible_groups=['a', 's', 'd', 'f', 'game']),
widget.Sep(**sep),
widget.Volume(**volume),
music,
widget.TaskList(**tasklist),
systray,
widget.Sep(**sep),
disk,
updates,
widget.Sep(**soft_sep),
widget.Clock(**clock),
], bar_size)
bar2 = bar.Bar(
[
widget.GroupBox(**groupbox, visible_groups=['u', 'i', 'o', 'p', 'music', 'chat']),
widget.Sep(**sep),
widget.Volume(**volume),
widget.TaskList(**tasklist),
battery_icon,
battery,
widget.Sep(**soft_sep),
widget.Clock(**clock),
], bar_size)

View file

@ -1,40 +0,0 @@
# gruvbox
theme = {
'dark_black': '{{ theme.dark_black }}',
'black': '{{ theme.black }}',
'light_black': '{{ theme.light_black }}',
'very_light_black': '{{ theme.very_light_black }}',
'dark_gray': '{{ theme.dark_gray }}',
'gray': '{{ theme.gray }}',
'light_gray': '{{ theme.light_gray }}',
'very_light_gray': '{{ theme.very_light_gray }}',
'dark_white': '{{ theme.dark_white }}',
'white': '{{ theme.white }}',
'light_white': '{{ theme.light_white }}',
'very_light_white': '{{ theme.very_light_white }}',
'dark_red': '{{ theme.dark_red }}',
'red': '{{ theme.red }}',
'dark_green': '{{ theme.dark_green }}',
'green': '{{ theme.green }}',
'dark_yellow': '{{ theme.dark_yellow }}',
'yellow': '{{ theme.yellow }}',
'dark_blue': '{{ theme.dark_blue }}',
'blue': '{{ theme.blue }}',
'dark_purple': '{{ theme.dark_purple }}',
'purple': '{{ theme.purple }}',
'dark_teal': '{{ theme.dark_teal }}',
'teal': '{{ theme.teal }}',
'dark_orange': '{{ theme.dark_orange }}',
'orange': '{{ theme.orange }}',
}
border_color = theme['white']

View file

@ -1,131 +0,0 @@
import re
from subprocess import run
from pathlib import Path
from typing import List
from libqtile import layout, hook
from libqtile.config import Group, Match, Screen, Rule
from bars import main_bar, bar1, bar2
from keys import keys, mouse, sc, get_backlight_keys
from colors import border_color, theme
from util import qtile_func
from util.monitor import enable_monitor
keys = keys
mouse = mouse
screens: List[Screen] = []
groups = [
Group('game', layouts=[layout.Max()], persist=False, init=False,
matches=[Match(wm_class=['Steam'])], label=''),
Group('chat', layouts=[layout.Max()], persist=False, init=False,
matches=[Match(wm_class=['discord'])], label=''),
Group('music', layouts=[layout.Max()], persist=False, init=False,
matches=[Match(wm_class=[re.compile('spotify', re.I)])], label=''),
]
float_rules = [
{'wmclass': 'confirm'},
{'wmclass': 'dialog'},
{'wmclass': 'download'},
{'wmclass': 'error'},
{'wmclass': 'file_progress'},
{'wmclass': 'notification'},
{'wmclass': 'splash'},
{'wmclass': 'toolbar'},
{'wmclass': 'Xephyr'},
{'wmclass': 'feh'},
{'wmclass': 'Sms.py'},
{'wmclass': 'leagueclientux.exe'},
{'wmclass': 'Gcr-prompter'},
{'wmclass': 'scrcpy'},
{'wname': 'Friends'},
]
floating_layout = layout.Floating(border_focus=f'#{border_color}',
float_rules=float_rules)
layouts = [
layout.Max(),
layout.Stack(num_stacks=2, border_focus=f'#{border_color}')
]
widget_defaults = {'font': 'DejaVu Sans',
'fontsize': 18,
'padding': 4,
'foreground': theme['very_light_white'],
'background': theme['dark_black']}
def setup_monitors(qtile):
monitors = qtile.conn.monitors
nb_monitors = len(monitors)
if nb_monitors == 1:
run('xrandr --auto'.split())
elif nb_monitors == 2:
laptop_monitor = None
other_monitor = None
for monitor in monitors:
if monitor.name.startswith('eDP'):
laptop_monitor = monitor
else:
other_monitor = monitor
enable_monitor(other_monitor, primary=True, side='left-of',
relative_monitor=laptop_monitor)
def setup_screens(qtile, screens, groups):
nb_monitors = len(qtile.conn.monitors)
if nb_monitors == 1:
screens.append(Screen(top=main_bar))
groups += [Group(i) for i in 'asdf']
else:
screens += [Screen(top=bar1), Screen(top=bar2)]
groups += [Group(i) for i in 'asdfuiop']
def main(qtile):
global keys
setup_monitors(qtile)
setup_screens(qtile, screens, groups)
keys += get_backlight_keys(qtile)
def wallpaper():
wallpaper_path = Path.home() / '.wallpaper'
run(['feh', '--bg-scale', wallpaper_path])
@hook.subscribe.startup
def autostart():
wallpaper()
sc.set_profile('analog')
@hook.subscribe.addgroup
def go_to_group(qtile, group):
try:
qtile.groupMap[group].cmd_toscreen()
except AttributeError:
pass
@hook.subscribe.screen_change
def configure_monitors(qtile, ev):
setup_monitors(qtile)
qtile.cmd_restart()
dgroups_app_rules: List[Rule] = []
dgroups_key_binder = None
follow_mouse_focus = False
bring_front_click = False
cursor_warp = False
auto_fullscreen = True
focus_on_window_activation = 'focus'
wmname = 'LG3D'

View file

@ -1,124 +0,0 @@
from libqtile.config import Key, Drag
from libqtile.command import lazy
from util.backlight import Backlight
from util.screenshot import screenshot
from util.soundcard import SoundCard
from util import qtile_func
# super = mod4, alt = mod1
mod = 'mod4'
BROWSER = '{{ browser }}'
TERM= '{{ term }}'
MUSIC_PLAYER = 'spotify'
# add 'PlayPause', 'Next' or 'Previous'
spotify_cmd = ('dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify '
'/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.')
amixer_cmd = 'amixer -D pulse set Master'
rofi_cmd = 'rofi -combi-modi window,run -show combi -modi combi -monitor -4'
sc = SoundCard('alsa_card.pci-0000_00_1f.3')
def app_or_group(group, app):
"""Go to app if already open else open it."""
def f(qtile):
if group in {'music'}:
qtile.cmd_to_screen(1)
try:
qtile.groupMap[group].cmd_toscreen()
except KeyError:
qtile.cmd_spawn(app)
return f
def go_to_group(group):
"""The groups 'asdf' are accessible on screen 1, 'uiop' on screen 2."""
def f(qtile):
if group in 'asdf':
qtile.cmd_to_screen(0)
qtile.groupMap[group].cmd_toscreen()
elif group in 'uiop':
qtile.cmd_to_screen(1)
qtile.groupMap[group].cmd_toscreen()
return f
# TODO: make this function work for more than two monitors
def get_backlight_keys(qtile):
monitors = qtile.conn.monitors
keys = []
for monitor in monitors:
bl = Backlight(ctrl=monitor.backlight_ctrl)
if monitor.name.startswith('eDP'):
keys.append(Key([], 'XF86MonBrightnessUp', lazy.function(bl.change_backlight('inc'))))
keys.append(Key([], 'XF86MonBrightnessDown', lazy.function(bl.change_backlight('dec'))))
keys.append(Key([], 'F7', lazy.function(bl.turn_off_screen(monitor.x))))
else:
keys.append(Key([mod], 'Up', lazy.function(bl.change_backlight('inc'))))
keys.append(Key([mod], 'Down', lazy.function(bl.change_backlight('dec'))))
keys.append(Key([mod], 'F7', lazy.function(bl.turn_off_screen(monitor.x))))
return keys
keys = [
Key([mod, 'control'], 'p', lazy.spawn('xbacklight -set 50')),
Key([mod], 'k', lazy.layout.down()), # noqa
Key([mod], 'j', lazy.layout.up()), # noqa
Key([mod], 'space', lazy.layout.next()), # noqa
Key([mod, 'control'], 'k', lazy.layout.shuffle_down()), # noqa
Key([mod, 'control'], 'j', lazy.layout.shuffle_up()), # noqa
Key([mod, 'shift'], 'h', lazy.layout.client_to_previous()), # noqa
Key([mod, 'shift'], 'l', lazy.layout.client_to_next()), # noqa
Key([mod, 'shift'], 'space', lazy.layout.rotate()), # noqa
Key([mod, 'shift'], 'Return', lazy.layout.toggle_split()), # noqa
Key([mod], 'slash', lazy.screen.toggle_group()), # noqa
Key([mod], 'x', lazy.window.kill()), # noqa
Key([mod], 'y', lazy.window.toggle_floating()), # noqa
Key([mod], '1', lazy.to_screen(0)), # noqa
Key([mod], '2', lazy.to_screen(1)), # noqa
Key([mod], 'Tab', lazy.next_layout()), # noqa
Key([mod, 'control'], 'r', lazy.restart()), # noqa
Key([mod, 'control'], 'q', lazy.shutdown()), # noqa
# Audio
Key([], 'XF86AudioMute', lazy.spawn(amixer_cmd + ' 1+ toggle')), # noqa
Key([], 'XF86AudioRaiseVolume', lazy.spawn(amixer_cmd + ' 5%+')), # noqa
Key([], 'XF86AudioLowerVolume', lazy.spawn(amixer_cmd + ' 5%-')), # noqa
Key([], 'XF86AudioPlay', lazy.spawn(spotify_cmd + 'PlayPause')), # noqa
Key([], 'XF86AudioNext', lazy.spawn(spotify_cmd + 'Next')), # noqa
Key([], 'XF86AudioPrev', lazy.spawn(spotify_cmd + 'Previous')), # noqa
Key([mod], 'bracketleft', lazy.function(sc.change_sink('prev'))), # noqa
Key([mod], 'bracketright', lazy.function(sc.change_sink('next'))), # noqa
Key([], 'F8', lazy.function(sc.swap_profile())), # noqa
# Apps
Key([mod], 't', lazy.spawn(rofi_cmd)), # noqa
Key([mod], 'Return', lazy.spawn(TERM)), # noqa
Key([mod], 'b', lazy.spawn(BROWSER)), # noqa
Key([mod], 'g', lazy.function(app_or_group('game', 'steam'))), # noqa
Key([mod], 'n', lazy.function(app_or_group('chat', 'discord'))), # noqa
Key([mod], 'm', lazy.function(app_or_group('music', MUSIC_PLAYER))), # noqa
# Screenshots
Key([], 'Print', lazy.function(screenshot())), # noqa
Key(['control'], 'Print', lazy.spawn('deepin-screenshot')), # noqa
]
for i in 'asdfuiop':
keys.append(Key([mod], i, lazy.function(go_to_group(i)))) # noqa
keys.append(Key([mod, 'shift'], i, lazy.window.togroup(i))) # noqa
mouse = [
Drag([mod], "Button1", lazy.window.set_position_floating(),
start=lazy.window.get_position()),
Drag([mod, 'control'], "Button1", lazy.window.set_size_floating(),
start=lazy.window.get_size()),
]

View file

@ -1,23 +0,0 @@
from functools import wraps
from subprocess import run, PIPE
from typing import Callable, Any
import parse
def qtile_func(func: Callable[..., Any]) -> Callable[..., Any]:
"""
This decorator makes a function suitable to be used as a parameter for
`lazy.function()` by making the wrapped function return a function that
takes the qtile instance as first parameter.
"""
@wraps(func)
def wrapper(*args, **kwargs):
def f(qtile):
func(*args, **kwargs)
return f
return wrapper
def notify(summary: str, body: str, urgency: str='normal') -> None:
run(['notify-send', '-u', urgency, summary, body])

View file

@ -1,50 +0,0 @@
from subprocess import run, PIPE
from typing import Optional
from pynput import mouse
from . import qtile_func
class Backlight:
def __init__(self, ctrl: Optional[str]=None) -> None:
self.command = ['xbacklight']
if ctrl:
self.command += ['-ctrl', ctrl]
def _get_brightness(self) -> int:
return int(run(self.command + ['-get'], stdout=PIPE).stdout)
def _set_brightness(self, percentage: int) -> None:
run(self.command + [f'-set', str(percentage)])
@qtile_func
def change_backlight(self, action: str) -> None:
"""
Increase or decrease bightness.
Takes 'dec' or 'inc' as parameter. Goes 1% percent at a time from
1% to 40% and 10% at a time from 40% to 100%.
"""
brightness = self._get_brightness()
if brightness != 1 or action != 'dec':
if (brightness > 49 and action == 'dec') \
or (brightness > 39 and action == 'inc'):
run(self.command + [f'-{action}', '10', '-fps', '10'])
else:
run(self.command + [f'-{action}', '1'])
@qtile_func
def turn_off_screen(self, screen_offset: int) -> None:
"""
Turn off the laptop's screen.
Use xset if there is only one screen, else, set backlight to
zero. In both case, moving the mouse will turn on the screen.
"""
current_brightness = self._get_brightness()
self._set_brightness(0)
def on_move(x: int, y: int):
if x > screen_offset:
self._set_brightness(current_brightness)
raise mouse.Listener.StopException
mouse.Listener(on_move=on_move).start()

View file

@ -1,24 +0,0 @@
from subprocess import run
from pathlib import Path
from typing import Optional
from libqtile.log_utils import logger
from libqtile.xcbq import Monitor
from .backlight import Backlight
Side = str # one of 'left-of', 'right-of', 'above', 'below' or 'same-as'
def enable_monitor(monitor: Monitor, primary: bool=False, side: Optional[Side]=None,
relative_monitor: Optional[Monitor]=None) -> None:
command = ['xrandr', '--output', monitor.name, '--auto']
if primary:
command += ['--primary']
if side:
if not relative_monitor:
raise Exception('Need a monitor to be relative to')
command += ['--{}'.format(side), relative_monitor.name]
run(command)
logger.info(f'Running command: {" ".join(command)}')

View file

@ -1,16 +0,0 @@
from time import time
from pathlib import Path
from subprocess import run, PIPE
from . import qtile_func
@qtile_func
def screenshot(save: bool=True, copy: bool=True) -> None:
shot = run(['maim'], stdout=PIPE)
if save:
path = Path.home() / 'Pictures'
path /= f'screenshot_{str(int(time() * 100))}.png'
with open(path, 'wb') as sc:
sc.write(shot.stdout)
if copy:
run('xclip -sel clip -t image/png'.split(), input=shot.stdout)

View file

@ -1,79 +0,0 @@
from subprocess import run, PIPE
import parse
from . import qtile_func, notify
class SoundCard():
def __init__(self, primary_card_name):
self.primary_card = primary_card_name
def get_current_sink(self):
cp = run(['pactl', 'info'], stdout=PIPE)
output = cp.stdout.decode('utf-8')
return parse.search('Default Sink: {}\n', output)[0]
def list_sinks(self):
"""Generator that yields for each sink, the sink and card name."""
cp = run(['pactl', 'list', 'sinks'], stdout=PIPE)
output = cp.stdout.decode('utf-8')
for sink in output.split('\nSink'):
sink_name = parse.search('Name: {}\n', sink)[0]
card_name = parse.search('alsa.card_name = "{}"', sink)[0]
yield sink_name, card_name
def set_new_sink(self, sink_card_tuple):
run(['pactl', 'set-default-sink', sink_card_tuple[0]])
def list_sink_inputs(self):
cp = run(['pactl', 'list', 'short', 'sink-inputs'], stdout=PIPE)
output = cp.stdout.decode('utf-8')
return {line.split()[0] for line in output.split('\n') if line}
def move_sink_input(self, name, new_sink):
run(['pactl', 'move-sink-input', name, new_sink])
def get_current_profile(self):
cp = run(['pactl', 'list', 'cards'], stdout=PIPE)
cp = run(['grep', 'Active'], stdout=PIPE, input=cp.stdout)
return 'hdmi' if b'hdmi' in cp.stdout else 'analog'
def set_profile(self, profile):
cmd = f'output:{profile}-stereo+input:analog-stereo'
run(['pactl', 'set-card-profile', self.primary_card, cmd])
@qtile_func
def change_sink(self, direction):
sinks = list(self.list_sinks())
# get the index of the tuple containing the current default sink
current_sink = self.get_current_sink()
for index, tup in enumerate(sinks):
if current_sink in tup:
default_sink_index = index
break
if direction == 'next':
new_sink = sinks[default_sink_index - 1]
elif direction == 'prev':
new_sink = sinks[(default_sink_index + 1) % len(sinks)]
self.set_new_sink(new_sink)
notify('Sound Card', new_sink[1])
# move current sink inputs, if any, to the new default sink
sink_inputs = self.list_sink_inputs()
if sink_inputs:
for sink_input in sink_inputs:
self.move_sink_input(sink_input, new_sink[0])
@qtile_func
def swap_profile(self):
profile = self.get_current_profile()
if profile == 'analog':
self.set_profile('hdmi')
notify('Sound Profile', 'HDMI')
elif profile == 'hdmi':
self.set_profile('analog')
notify('Sound Profile', 'Analog')

View file

@ -1,9 +0,0 @@
import subprocess
from libqtile import widget
class CheckUpdates(widget.CheckUpdates):
def __init__(self, **config):
super().__init__(**config)
self.cmd_dict.update({'Arch': ('pikaur -Sup', 0)})

View file

@ -1,5 +0,0 @@
from libqtile.config import Screen
from bars import top
screens = [Screen(top=top)]

View file

@ -1,19 +0,0 @@
#!/bin/bash
function run {
if ! pgrep "$1"; then
"$@" &
fi
}
setxkbmap -layout de
run nm-applet
run xfce4-power-manager
run blueberry-tray
run picom
run volumeicon
# run deadd-notification-center
run /usr/bin/lxqt-policykit-agent
run nitrogen --restore

View file

@ -1,12 +0,0 @@
{
"black": "#01060e",
"red": "#ea6c73",
"green": "#91b362",
"yellow": "#f9af4f",
"blue": "#53bdfa",
"purple": "#fae994",
"cyan": "#90e1c6",
"white": "#c7c7c7",
"background": "#brb1ad",
"foreground": "#0a0e14"
}

View file

@ -1,12 +0,0 @@
{
"black": "#21222c",
"red": "#ff5555",
"green": "#50fa7b",
"yellow": "#ffcb6b",
"blue": "#82aaff",
"purple": "#c792ea",
"cyan": "#8be9fd",
"white": "#f8f8f2",
"background": "#212121",
"foreground": "#f8f8f2"
}

View file

@ -1,12 +0,0 @@
{
"black": "#322931",
"red": "#dd464c",
"green": "#8fc13e",
"yellow": "#fdcc59",
"blue": "#1290bf",
"purple": "#c85e7c",
"cyan": "#149b93",
"white": "#b9b5b8",
"background": "#322931",
"foreground": "#b9b5b8"
}

View file

@ -1,12 +0,0 @@
{
"black": "#000000",
"red": "#ff5370",
"green": "#c3e88d",
"yellow": "#ffcb6b",
"blue": "#82aaff",
"purple": "#c792ea",
"cyan": "#89ddff",
"white": "#ffffff",
"background": "#212121",
"foreground": "#eeffff"
}

View file

@ -1,12 +0,0 @@
{
"black": "#3b4252",
"red": "#bf616a",
"green": "#a3be8c",
"yellow": "#ebcb8b",
"blue": "#81a1c1",
"purple": "#b48ead",
"cyan": "#88c0d0",
"white": "#e5e9f0",
"background": "#2e3440",
"foreground": "#d8dee9"
}

View file

@ -1,12 +0,0 @@
{
"black": "#131613",
"red": "#e06c75",
"green": "#98c379",
"yellow": "#d19a66",
"blue": "#61afef",
"purple": "#c678dd",
"cyan": "#56b6c2",
"white": "#abb2bf",
"background": "#282c34",
"foreground": "#abb2bf"
}

View file

@ -1,12 +0,0 @@
{
"black": "#5a5a5a",
"red": "#ca372d",
"green": "#4d7b3a",
"yellow": "#d4d697",
"blue": "#4387cf",
"purple": "#b86cb4",
"cyan": "#72d5c6",
"white": "#ced4cd",
"background": "#191919",
"foreground": "#c3cac2"
}

View file

@ -1,12 +0,0 @@
{
"black": "#241f2b",
"red": "#91284c",
"green": "#23801c",
"yellow": "#b49d27",
"blue": "#6580b0",
"purple": "#674d96",
"cyan": "#8aaabe",
"white": "#524966",
"background": "#100815",
"foreground": "#514968"
}

View file

@ -1,12 +0,0 @@
{
"black": "#17384c",
"red": "#d15123",
"green": "#027c9b",
"yellow": "#fca02f",
"blue": "#1e4950",
"purple": "#68d4f1",
"cyan": "#50a3b5",
"white": "#deb88d",
"background": "#09141b",
"foreground": "#deb88d"
}

View file

@ -1,12 +0,0 @@
{
"black": "#000000",
"red": "#b84131",
"green": "#7da900",
"yellow": "#c4a500",
"blue": "#62a3c4",
"purple": "#ba8acc",
"cyan": "#207383",
"white": "#a1a1a1",
"background": "#1b1b1b",
"foreground": "#f7f7f7"
}

View file

@ -1,12 +0,0 @@
{
"black": "#6e5346",
"red": "#e35b00",
"green": "#5cab96",
"yellow": "#e3cd7b",
"blue": "#0f548b",
"purple": "#e35b00",
"cyan": "#06afc7",
"white": "#f0f1ce",
"background": "#0a1e24",
"foreground": "#ecf0c1"
}

View file

@ -1,12 +0,0 @@
{
"black": "#000000",
"red": "#b04b57",
"green": "#87b379",
"yellow": "#e5c179",
"blue": "#7d8fa4",
"purple": "#a47996",
"cyan": "#85a7a5",
"white": "#b3b8c3",
"background": "#20242d",
"foreground": "#b3b8c3"
}

View file

@ -1,12 +0,0 @@
{
"black": "#050505",
"red": "#e9897c",
"green": "#b6377d",
"yellow": "#ecebbe",
"blue": "#a9cdeb",
"purple": "#75507b",
"cyan": "#c9caec",
"white": "#f2f2f2",
"background": "#1a1a1a",
"foreground": "#acacab"
}

View file

@ -1,12 +0,0 @@
{
"black": "#000000",
"red": "#d54e53",
"green": "#b9ca4a",
"yellow": "#e7c547",
"blue": "#7aa6da",
"purple": "#c397d8",
"cyan": "#70c0b1",
"white": "#ffffff",
"background": "#000000",
"foreground": "#eaeaea"
}

View file

@ -1,76 +0,0 @@
shell = "zsh"
[templates]
defer = "{% for file in files %}zsh-defer source \"{{ file }}\"\n{% endfor %}"
defer-more = "{% for file in files %}zsh-defer -t 0.5 source \"{{ file }}\"\n{% endfor %}"
[plugins.zsh-defer]
github = "romkatv/zsh-defer"
# completions
[plugins.zsh-completions]
github = "zsh-users/zsh-completions"
# plugins
[plugins.ohmyzsh-lib]
github = "ohmyzsh/ohmyzsh"
dir = "lib"
use = ["{completion,key-bindings,history,directories}.zsh"]
[plugins.ohmyzsh-plugins]
github = "ohmyzsh/ohmyzsh"
dir = "plugins"
use = ["{systemd,fzf,command-not-found}/*.plugin.zsh"]
[plugins.fzf-tab]
github = "Aloxaf/fzf-tab"
[plugins.fzf-marks]
github = "urbainvaes/fzf-marks"
[plugins.evalcache]
github = "mroth/evalcache"
[plugins.colorize]
github = "zpm-zsh/colorize"
[plugins.ssh]
github = "zpm-zsh/ssh"
[plugins.wakatime-zsh-plugin]
github = "sobolevn/wakatime-zsh-plugin"
[plugins.zsh-titles]
github = "amyreese/zsh-titles"
[plugins.zsh-thefuck]
github = "laggardkernel/zsh-thefuck"
[plugins.oath]
github = "alexdesousa/oath"
[plugins.zsh-exa]
github = "TwoPizza9621536/zsh-exa"
[plugins.zsh-bat]
github = "fdellwing/zsh-bat"
[plugins.zsh-you-should-use]
github = "MichaelAquilina/zsh-you-should-use"
[plugins.zsh-autosuggestions]
github = "zsh-users/zsh-autosuggestions"
use = ["{{ name }}.zsh"]
[plugins.zsh-syntax-highlighting]
github = "zsh-users/zsh-syntax-highlighting"
# theme
[plugins.powerlevel10k]
github = "romkatv/powerlevel10k"
# own files
[plugins.own-files]
local = "~/.config/zsh/"
use = ["{aliases,keybinds,distroicon,transfer}.zsh"]

View file

@ -1,8 +0,0 @@
add_newline = false
format = """$env_var $all"""
[env_var.DISTROICON]
format = '[$env_value](white)'
variable = "DISTROICON"
disabled = false

View file

@ -0,0 +1,107 @@
[misc]
# Don't ask for confirmations
#assume_yes = true
# Disable specific steps - same options as the command line flag
{{- if eq .chezmoi.osRelease.id "endeavouros" }}
disable = ["tldr", "pip3", "node", "vim", "git_repos", "containers", "asdf", "distrobox", "helix", "composer", "yarn", "cargo", "remotes", "rustup", "vscode", "powershell", "dotnet", "flatpak", "shell", "snap", "sheldon", "clam_av_db", "helm", "certbot", "bun", "bun_packages", "jet_brains_toolbox", "nix"]
{{- else }}
disable = ["tldr", "pip3", "node", "vim", "git_repos", "containers", "asdf", "distrobox", "helix", "composer", "yarn", "cargo", "remotes", "rustup", "vscode", "powershell", "dotnet", "flatpak", "shell", "snap", "sheldon", "clam_av_db", "helm", "certbot", "bun", "bun_packages", "jet_brains_toolbox", "firmware"]
{{- end }}
# Skip Notify
skip_notify = true
# Ignore failures for these steps
#ignore_failures = ["powershell"]
# Run specific steps - same options as the command line flag
#only = ["system", "emacs"]
# Do not ask to retry failed steps (default: false)
#no_retry = true
# Run inside tmux
#run_in_tmux = true
# List of remote machines with Topgrade installed on them
{{- if eq .chezmoi.hostname "pxm" }}
remote_topgrades = ["mail"]
{{- else }}
remote_topgrades = ["pxm", "web", "kube", "kali", "uptime"]
{{- end }}
# Arguments to pass SSH when upgrading remote systems
#ssh_arguments = "-o ConnectTimeout=2"
# Path to Topgrade executable on remote machines
remote_topgrade_path = ".local/bin/topgrade"
# Arguments to pass tmux when pulling Repositories
#tmux_arguments = "-S /var/tmux.sock"
# Do not set the terminal title
#set_title = false
# Cleanup temporary or old files
#cleanup = true
[git]
#max_concurrency = 5
# Additional git repositories to pull
#repos = [ "~/src/*/", "~/.config/something" ]
# Don't pull the predefined git repos
#predefined_repos = false
# Arguments to pass Git when pulling Repositories
#arguments = "--rebase --autostash"
[composer]
#self_update = true
# Commands to run before anything
[pre_commands]
#"Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak"
# Custom commands
[commands]
#"Bedrock: Check Updates" = "sudo brl update"
#"Bedrock: Check Strata" = "sudo pmm -Syyuu"
#"Distrobox: Update all" = "distrobox upgrade --all"
[brew]
#greedy_cask = true
[linux]
# Arguments to pass yay when updating packages
#yay_arguments = "--nodevel"
#trizen_arguments = "--devel"
#enable_tlmgr = true
#emerge_sync_flags = "-q"
#emerge_update_flags = "-uDNa --with-bdeps=y world"
#redhat_distro_sync = false
#rpm_ostree = false
[windows]
# Manually select Windows updates
#accept_all_updates = false
#open_remotes_in_new_terminal = true
# Causes Topgrade to rename itself during the run to allow package managers to upgrade it.
# Use this only if you installed Topgrade by using a package manager such as Scoop to Cargo
#self_rename = true
[npm]
# Use sudo if the NPM directory isn't owned by the current user
#use_sudo = true
[firmware]
# Offer to update firmware; if false just check for and display available updates
#upgrade = true
[flatpak]
# Use sudo for updating the system-wide installation
#use_sudo = true

View file

@ -1,19 +0,0 @@
alias cd='z'
alias grep='rg'
alias find='fd'
# make rm, cp and mv safer
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# misc aliases
alias termbin="nc termbin.com 9999"
alias ktheme='kitty +kitten themes --reload-in=all'
alias wget='wget --hsts-file="$XDG_DATA_HOME"/wget-hsts'
if (( ${+commands[nvim]} )); then alias vim="nvim"; fi
# gdb stuff
alias peda="gdb -iex 'source /usr/share/peda/peda.py' --nh -q"
alias gef="gdb -iex 'source /usr/share/gef/gef.py' --nh -q"
alias pwndbg="gdb -iex 'source /usr/share/pwndbg/gdbinit.py' --nh -q"

View file

@ -1,33 +0,0 @@
# find out which distribution we are running on
FILE="/etc/*-release"
if [[ -f $FILE ]]; then
_distro=$(awk '/^ID=/' /etc/*-release | awk -F'=' '{ print tolower($2) }')
fi
# set an icon based on the distro
case $_distro in
*kali*) ICON="ﴣ";;
*arch*|*endeavouros*) ICON="";;
*debian*) ICON="";;
*raspbian*) ICON="";;
*ubuntu*) ICON="";;
*elementary*) ICON="";;
*fedora*) ICON="";;
*coreos*) ICON="";;
*gentoo*) ICON="";;
*mageia*) ICON="";;
*centos*) ICON="";;
*opensuse*|*tumbleweed*) ICON="";;
*sabayon*) ICON="";;
*slackware*) ICON="";;
*linuxmint*) ICON="";;
*alpine*) ICON="";;
*aosc*) ICON="";;
*nixos*) ICON="";;
*devuan*) ICON="";;
*manjaro*) ICON="";;
*rhel*) ICON="";;
*) ICON="";;
esac
export DISTROICON="$ICON"

View file

@ -0,0 +1,35 @@
# ohmyzsh
getantidote/use-omz
ohmyzsh/ohmyzsh path:lib
# omz plugins
ohmyzsh/ohmyzsh path:plugins/systemd
ohmyzsh/ohmyzsh path:plugins/command-not-found
ohmyzsh/ohmyzsh path:plugins/fzf
ohmyzsh/ohmyzsh path:plugins/ssh-agent
# utility plugins
trapd00r/LS_COLORS
3v1n0/zsh-bash-completions-fallback
QuarticCat/zsh-smartcache
unixorn/warhol.plugin.zsh
twopizza9621536/zsh-eza
fdellwing/zsh-bat
amyreese/zsh-titles
Aloxaf/fzf-tab
{{- if eq .chezmoi.osRelease.id "endeavouros" }}
sunlei/zsh-ssh
{{- end }}
# other plugins
urbainvaes/fzf-marks
{{- if eq .chezmoi.osRelease.id "endeavouros" }}
sobolevn/wakatime-zsh-plugin
{{- end }}
laggardkernel/zsh-thefuck
MichaelAquilina/zsh-you-should-use
# fish like (load last)
zsh-users/zsh-completions path:src kind:fpath
zsh-users/zsh-autosuggestions
zdharma-continuum/fast-syntax-highlighting

View file

@ -1,17 +1,11 @@
# path
export PATH="$HOME"/.local/bin:"$PATH"
# ibus specific
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
# xdg stuff # xdg stuff
export XDG_DATA_HOME="$HOME"/.local/share
export XDG_CONFIG_HOME="$HOME"/.config
export XDG_STATE_HOME="$HOME"/.local/state
export XDG_CACHE_HOME="$HOME"/.cache export XDG_CACHE_HOME="$HOME"/.cache
export XDG_DESKTOP_DIR=$HOME/Desktop export XDG_CONFIG_HOME="$HOME"/.config
export XDG_CONFIG_DIRS=/etc/xdg
export XDG_DATA_HOME="$HOME"/.local/share
export XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/flatpak/exports/share:"$XDG_DATA_HOME"/flatpak/exports/share
export XDG_STATE_HOME="$HOME"/.local/state
export XDG_DESKTOP_DIR="$HOME"/Desktop
export XDG_DOCUMENTS_DIR="$HOME"/Documents export XDG_DOCUMENTS_DIR="$HOME"/Documents
export XDG_DOWNLOAD_DIR="$HOME"/Downloads export XDG_DOWNLOAD_DIR="$HOME"/Downloads
export XDG_MUSIC_DIR="$HOME"/Music export XDG_MUSIC_DIR="$HOME"/Music
@ -19,10 +13,6 @@ export XDG_PICTURES_DIR="$HOME"/Pictures
export XDG_VIDEOS_DIR="$HOME"/Videos export XDG_VIDEOS_DIR="$HOME"/Videos
export XDG_PROJECTS_DIR="$XDG_DOCUMENTS_DIR"/projects export XDG_PROJECTS_DIR="$XDG_DOCUMENTS_DIR"/projects
# system xdg stuff
export XDG_DATA_DIRS=/usr/local/share:/usr/share
export XDG_CONFIG_DIRS=/etc/xdg
# cache files # cache files
export NUGET_PACKAGES="$XDG_CACHE_HOME"/NuGetPackages export NUGET_PACKAGES="$XDG_CACHE_HOME"/NuGetPackages
export ZSH_EVALCACHE_DIR="$XDG_CACHE_HOME"/evalcache export ZSH_EVALCACHE_DIR="$XDG_CACHE_HOME"/evalcache
@ -34,6 +24,7 @@ export DOCKER_CONFIG="$XDG_CONFIG_HOME"/docker
export GTK2_RC_FILES="$XDG_CONFIG_HOME"/gtk-2.0/gtkrc export GTK2_RC_FILES="$XDG_CONFIG_HOME"/gtk-2.0/gtkrc
export _JAVA_OPTIONS=-Djava.util.prefs.userRoot="$XDG_CONFIG_HOME"/java export _JAVA_OPTIONS=-Djava.util.prefs.userRoot="$XDG_CONFIG_HOME"/java
export GDBHISTFILE="$XDG_CONFIG_HOME"/gdb/history export GDBHISTFILE="$XDG_CONFIG_HOME"/gdb/history
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME"/npm/npmrc
# data files # data files
export XCURSOR_PATH=/usr/share/icons:"$XDG_DATA_HOME"/icons export XCURSOR_PATH=/usr/share/icons:"$XDG_DATA_HOME"/icons
@ -43,23 +34,39 @@ export ASDF_DATA_DIR="$XDG_DATA_HOME"/asdf
export NB_DIR="$XDG_DATA_HOME"/nb export NB_DIR="$XDG_DATA_HOME"/nb
export DSTASK_GIT_REPO="$XDG_DATA_HOME"/dstask export DSTASK_GIT_REPO="$XDG_DATA_HOME"/dstask
export WAKATIME_HOME="$XDG_DATA_HOME"/wakatime export WAKATIME_HOME="$XDG_DATA_HOME"/wakatime
export WINEPREFIX="$XDG_DATA_HOME"/wine
# gpg export RUSTUP_HOME="$XDG_DATA_HOME"/rustup
#export GNUPGHOME="$XDG_DATA_HOME"/gnupg export GNUPGHOME="$XDG_DATA_HOME"/gnupg
export GPG_TTY="$TTY" export W3M_DIR="$XDG_DATA_HOME"/w3m
export GIBO_BOILERPLATES="$XDG_DATA_HOME"/giboboilerplates
export REDISCLI_HISTFILE="$XDG_DATA_HOME"/redis/history
export IPFS_PATH="$XDG_DATA_HOME"/ipfs
# other programs # other programs
export LESSHISTFILE="$XDG_STATE_HOME"/less/history export LESSHISTFILE="$XDG_STATE_HOME"/less/history
{{- if eq .chezmoi.osRelease.id "endeavouros" }}
export EDITOR=nvim export EDITOR=nvim
export VISUAL="subl -w" {{- else }}
export EDITOR=vim
{{- end }}
export ZSH_WAKATIME_BIN=/usr/bin/wakatime export ZSH_WAKATIME_BIN=/usr/bin/wakatime
export PYTHONSTARTUP=/etc/python/pythonrc
# stuff # stuff
export ZELLIJ_AUTO_ATTACH=true export ZELLIJ_AUTO_ATTACH=true
export ZELLIJ_AUTO_EXIT=true export ZELLIJ_AUTO_EXIT=true
export TERMINALNAME=$(fastfetch --pipe 2>/dev/null | grep -i terminal: | awk '{print $2}') export MANROFFOPT="-c"
export FZF_DEFAULT_OPTS='--color=fg:#f8f8f2,bg:#282a36,hl:#bd93f9 --color=fg+:#f8f8f2,bg+:#44475a,hl+:#bd93f9 --color=info:#ffb86c,prompt:#50fa7b,pointer:#ff79c6 --color=marker:#ff79c6,spinner:#ffb86c,header:#6272a4'
# zsh specific # zsh specific
export HISTSIZE=1048576 export SAVEHIST=$(( 100 * 1000 ))
export SAVEHIST=1048576 export HISTSIZE=$(( 1.2 * SAVEHIST ))
export HISTFILE="$XDG_CACHE_HOME"/zsh/history export ZSH_CACHE_DIR="$XDG_CACHE_HOME"/zsh
export HISTFILE="$ZSH_CACHE_DIR"/history
export GPG_TTY="$TTY"
unset FZF_MARKS_JUMP
{{- if eq .chezmoi.osRelease.id "endeavouros" }}
export DIFFPROG='meld'
{{- end }}
export AUTO_NTFY_DONE_IGNORE="ntfy emacs htop info less mail man meld most mutt nano screen ssh tail tmux top vi vim watch bat cat kate topgrade"
export EXA_COLORS="uu=36:gu=37:sn=32:sb=32:da=34:ur=34:uw=35:ux=36:ue=36:gr=34:gw=35:gx=36:tr=34:tw=35:tx=36"

View file

@ -0,0 +1,53 @@
{{- if eq .chezmoi.osRelease.id "endeavouros" }}
test -v DISTROBOX_HOST_HOME && { unset ZDOTDIR; exec zsh }
test -v SSH_CONNECTION && eval "$(zellij setup --generate-auto-start zsh)"
{{- end }}
# options
setopt NO_CLOBBER
unsetopt FLOW_CONTROL
# deduplicate path
typeset -U path PATH
{{- if eq .chezmoi.osRelease.id "endeavouros" }}
path+=("$XDG_DATA_HOME"/JetBrains/Toolbox/scripts) # jetbrains toolbox
path+=("$XDG_DATA_HOME/mise/shims") # mise
path+=("$XDG_CONFIG_HOME"/composer/vendor/bin) # composer
{{- end }}
path+=("$HOME"/.local/bin) # local bin
# startup banner
potentialBanner=('joke bofh' 'joke dad' 'fastfetch')
eval "$potentialBanner[$RANDOM%$#potentialBanner+1]"
# antidote
{{- if eq .chezmoi.osRelease.id "endeavouros" }}
source '/usr/share/zsh-antidote/antidote.zsh'
{{- else }}
test -r "$XDG_DATA_HOME"/antidote/antidote.zsh || git clone https://github.com/mattmc3/antidote.git "$XDG_DATA_HOME"/antidote
source "$XDG_DATA_HOME"/antidote/antidote.zsh
{{- end }}
zstyle ':antidote:bundle' use-friendly-names 'yes'
antidote load
# load programs
smartcache eval zoxide init --cmd cd zsh
smartcache eval atuin init zsh
smartcache eval direnv hook zsh
{{- if eq .chezmoi.osRelease.id "endeavouros" }}
eval "$(mise activate zsh)"
{{- end }}
{{- if eq .chezmoi.osRelease.id "endeavouros" }}
zstyle ':completion:*:(scp|sftp|rsh|rsync):*' hosts ${=${${(f)"$(cat ~/.ssh/known_hosts/{default,priv,work/*}(|2)(N) /dev/null)"}%%[# ]*}//,/ }
{{- end }}
# source files
source "$ZDOTDIR"/files/aliases.zsh
# local overrides
for sourced in "$XDG_DATA_HOME"/zsh/*; do source $sourced; done
# theme
ompTheme="https://github.com/JanDeDobbeleer/oh-my-posh/blob/main/themes/emodipt-extend.omp.json"
eval "$(oh-my-posh init zsh --config="$ompTheme")"

View file

@ -0,0 +1,81 @@
alias grep='rg'
alias find='fd'
# make rm, cp and mv safer
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# misc aliases
alias termbin="nc termbin.com 9999"
alias ktheme='kitty +kitten themes --reload-in=all'
alias wget='wget --hsts-file="$XDG_DATA_HOME"/wget-hsts'
if (( ${+commands[nvim]} )); then alias vim="nvim"; fi
# gdb stuff
alias peda="gdb -iex 'source /usr/share/peda/peda.py' --nh -q"
alias gef="gdb -iex 'source /usr/share/gef/gef.py' --nh -q"
alias pwndbg="gdb -iex 'source /usr/share/pwndbg/gdbinit.py' --nh -q"
# add previous command to pet
function prev() {
PREV=$(fc -lrn | head -n 1)
sh -c "pet new `printf %q "$PREV"`"
}
# select from pet snippets
function petselect() {
BUFFER=$(pet search --query "$LBUFFER")
CURSOR=$#BUFFER
zle redisplay
}
zle -N petselect
bindkey '^s' petselect
# ranger as cli file manager
function runranger() {
echo
ranger < $TTY
zle redisplay
}
zle -N runranger
bindkey '^f' runranger
function yy() {
if [ -n "$YAZI_LEVEL" ]; then
exit
fi
local tmp="$(mktemp -t "yazi-cwd.XXXXX")"
yazi "$@" --cwd-file="$tmp"
if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
cd -- "$cwd"
fi
rm -f -- "$tmp"
}
bindkey -s "^y" "yy\n"
function ss() {
command grc --colour=auto ss "$@"
}
function gi() {
curl -sLw "\n" "https://www.toptal.com/developers/gitignore/api/$@"
}
function findfile() {
local search
if test "$1" = "--update"; then
sudo updatedb
shift
search=$1
else
search=$1
fi
locate "$PWD*$search*"
}
function scanKeys() {
ssh-keyscan $1 | grep -v '#'
}

View file

@ -0,0 +1,75 @@
#
# Paths
#
# Export existing paths.
typeset -gxU path PATH
typeset -gxU fpath FPATH
typeset -gxU cdpath CDPATH
typeset -gxU mailpath MAILPATH
typeset -gxU manpath MANPATH
# Create and export new paths.
typeset -gxU infopath INFOPATH
typeset -gxU node_path NODE_PATH
# Tie the new paths.
typeset -gxTU INFOPATH infopath
typeset -gxTU NODE_PATH nodepath
# Set the list of directories that zsh searches for commands.
path=(
$HOME/bin
$HOME/.rvm/bin
/Applications/Postgres.app/Contents/MacOS/bin
/usr/local/{sbin,bin}
/usr/local/heroku/{sbin,bin}
/usr/local/opt/rbenv/shims
/usr/local/share/npm/bin
/opt/{sbin,bin}
/opt/local/{sbin,bin}
/usr/{sbin,bin}
/usr/X11R6/bin
/{sbin,bin}
$path
)
path=($^path(N-/))
# Set the list of directories that cd searches for directories.
setopt auto_cd
cdpath=(
.
$HOME
$HOME/Documents/Development
/Volumes/Daten/Development/gubo
/Volumes/Daten/Development/mojo
/Volumes/7\ Web/
)
cdpath=($^cdpath(N-/))
# Set the list of directories that info searches for manuals.
infopath=(
/usr/local/info
/usr/local/share/info
/usr/share/info
)
infopath=($^infopath(N-/))
# Set the list of directories that man searches for manuals.
manpath=(
/usr/local/man
/usr/local/share/man
/usr/share/man
)
manpath=($^manpath(N-/))
# Set the list of directories that zsh searches for mail.
mailpath=(
$mailpath
)
mailpath=($^mailpath(N-/))
# Set the list of directories that node.js searches for modules.
nodepath=(
/usr/local/share/npm/lib/node_modules
/usr/local/lib/node_modules
./node_modules
)

View file

@ -1,7 +0,0 @@
run_ranger () { echo; ranger < $TTY; zle redisplay }
zle -N run_ranger
bindkey '^f' run_ranger
pet_select () { BUFFER=$(pet search --query "$LBUFFER"); CURSOR=$#BUFFER; zle redisplay }
zle -N pet_select
bindkey '^l' pet_select

View file

@ -1,50 +0,0 @@
if test -v DISTROBOX_HOST_HOME; then unset ZDOTDIR; exec zsh; fi # fix distrobox
if test $TERMINALNAME = "alacritty"; then eval "$(zellij setup --generate-auto-start zsh)"; fi # autostart only in alacritty
#fastfetch
bofh; echo " - BOFH"
#hackerquotes
#colorscript random
try_source () { test -r $1 && source $1 }
# local env exports
try_source "$XDG_DATA_HOME"/zsh/env.zsh
# Powerlevel10k - instant prompt and config
try_source "$XDG_CACHE_HOME"/p10k-instant-prompt-$USERNAME.zsh
try_source "$XDG_CONFIG_HOME"/zsh/.p10k.zsh # p10k configure
# ensure zsh cache folder exists
mkdir -p "$XDG_CACHE_HOME"/zsh &>/dev/null
# compinit
autoload -Uz compinit; compinit -d "$XDG_CACHE_HOME"/zsh/compdump
# antidote
try_source /usr/share/zsh-antidote/antidote.zsh
zstyle ':antidote:bundle' use-friendly-names 'yes'
antidote load
# other themes
#_evalcache starship init zsh
#_evalcache oh-my-posh init zsh --config /usr/share/oh-my-posh/themes/kali.omp.json
# eval stuff
_evalcache zoxide init zsh
_evalcache dircolors -b /usr/share/LS_COLORS/LS_COLORS
_evalcache atuin init zsh
_evalcache navi widget zsh
_evalcache direnv hook zsh
try_source /opt/asdf-vm/asdf.sh
eval "$(keychain --dir "$XDG_CACHE_HOME"/keychain --eval --quiet id_rsa)"
# seperate configs
try_source "$ZDOTDIR"/aliases.zsh
try_source "$ZDOTDIR"/keybinds.zsh
try_source "$ZDOTDIR"/distroicon.zsh
try_source "$ZDOTDIR"/transfer.zsh
# ssh ignored patterns
zstyle ':completion:*:*:*:users' ignored-patterns '*'
zstyle ':completion:*:*:*:hosts-domain' ignored-patterns '<->.<->.<->.<->' '^[-[:alnum:]]##(.[-[:alnum:]]##)##' '*@*' '*localdomain*' '*.eeleater.org' '*.local' '*.hbz-nrw.de'

View file

@ -1 +0,0 @@
zprofile.zsh

View file

@ -1 +0,0 @@
zsh_plugins.txt

View file

@ -1 +0,0 @@
env.zsh

View file

@ -1 +0,0 @@
rc.zsh

View file

@ -1,26 +0,0 @@
transfer(){
if [ $# -eq 0 ]; then
echo "No arguments specified.\nUsage:\n transfer <file|directory>\n ... | transfer <file_name>">&2
return 1
fi
if tty -s; then
file="$1"
file_name=$(basename "$file")
if [ ! -e "$file" ]; then
echo "$file: No such file or directory">&2
return 1
fi
if [ -d "$file" ]; then
file_name="$file_name.zip"
(cd "$file" && zip -r -q - .) | curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name" | tee /dev/null
else
cat "$file" | curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name" | tee /dev/null
fi
else
file_name=$1
curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name" | tee /dev/null
fi
}

View file

@ -1 +0,0 @@

View file

@ -1,29 +0,0 @@
# oh my zsh
ohmyzsh/ohmyzsh path:lib/history.zsh
ohmyzsh/ohmyzsh path:lib/completion.zsh
ohmyzsh/ohmyzsh path:lib/directories.zsh
ohmyzsh/ohmyzsh path:lib/key-bindings.zsh
ohmyzsh/ohmyzsh path:plugins/systemd
ohmyzsh/ohmyzsh path:plugins/fzf
ohmyzsh/ohmyzsh path:plugins/command-not-found
# other plugins
Aloxaf/fzf-tab
urbainvaes/fzf-marks
mroth/evalcache
zpm-zsh/colorize
zpm-zsh/ssh
sobolevn/wakatime-zsh-plugin
amyreese/zsh-titles
laggardkernel/zsh-thefuck
MichaelAquilina/zsh-you-should-use
alexdesousa/oath
TwoPizza9621536/zsh-exa
fdellwing/zsh-bat
# theme
romkatv/powerlevel10k
# fish like
zsh-users/zsh-autosuggestions
zsh-users/zsh-syntax-highlighting

View file

@ -1,5 +0,0 @@
#!/usr/bin/env bash
excuses_file="$HOME/.local/share/zsh/bofh"
num_lines=$(nl $excuses_file | tail -n 1 | awk '{print $1}')
awk 'NR=='$((1 + RANDOM % num_lines ))'{print;exit}' $excuses_file

View file

@ -0,0 +1,7 @@
#!/bin/bash
cd "$HOME"/Dokumente/files/code/websites/zola/hook || exit
zola build
scp -r public web:site
ssh web 'sudo rm -rf /srv/site; sudo mv site /srv'

View file

@ -1,195 +0,0 @@
#!/usr/bin/zsh
# Just print a hacker quote randomly when open a terminal.
#
# Config Variables
# ----------------------------------------
#
# ZSH_HACKER_QUOTES_ENABLE_WHEN_INTERACTIVE
# print quotes if print hacker quotes when shell is an interactive login shell,
# don't check whether shell is a login shell or not.
# default only print hacker quotes when shell is an interactive and login shell.
#
# Development Notes
# ----------------------------------------
#
# use namespace `_zp_hq` (Zsh Plugin Hacker Quotes) to avoid naming conflict
_zp_hq::print_quote() {
if which fold &>/dev/null && [ -n "${COLUMNS:-}" ]; then
printf '%b\n\n' "$*" | fold -s -w $COLUMNS
else
printf '%b\n\n' "$*"
fi
}
_zp_hq_hacker_quotes=(
# Linus Torvalds
# https://en.wikiquote.org/wiki/Linus_Torvalds
"Talk is cheap. Show me the code.\n - Linus Torvalds"
"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.\n - Linus Torvalds"
"I'm an egotistical bastard, and I name all my projects after myself. First Linux, now git.\n - Linus Torvalds"
# Alan J. Perlis
# https://en.wikiquote.org/wiki/Alan_Perlis
"One man's constant is another man's variable.\n - Alan J. Perlis"
"Functions delay binding; data structures induce binding. Moral: Structure data late in the programming process.\n - Alan J. Perlis"
"Syntactic sugar causes cancer of the semicolon.\n - Alan J. Perlis"
"Every program is a part of some other program and rarely fits.\n - Alan J. Perlis"
"If a program manipulates a large amount of data, it does so in a small number of ways.\n - Alan J. Perlis"
"Symmetry is a complexity-reducing concept (co-routines include subroutines); seek it everywhere.\n - Alan J. Perlis"
"It is easier to write an incorrect program than understand a correct one.\n - Alan J. Perlis"
"A programming language is low level when its programs require attention to the irrelevant.\n - Alan J. Perlis"
"It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures.\n - Alan J. Perlis"
"Get into a rut early: Do the same process the same way. Accumulate idioms. Standardize. The only difference(!) between Shakespeare and you was the size of his idiom list - not the size of his vocabulary.\n - Alan J. Perlis"
"If you have a procedure with ten parameters, you probably missed some.\n - Alan J. Perlis"
"Recursion is the root of computation since it trades description for time.\n - Alan J. Perlis"
"If two people write exactly the same program, each should be put into microcode and then they certainly won't be the same.\n - Alan J. Perlis"
"In the long run every program becomes rococo - then rubble.\n - Alan J. Perlis"
"Everything should be built top-down, except the first time.\n - Alan J. Perlis"
"Every program has (at least) two purposes: the one for which it was written, and another for which it wasn't.\n - Alan J. Perlis"
"If a listener nods his head when you're explaining your program, wake him up.\n - Alan J. Perlis"
"A program without a loop and a structured variable isn't worth writing.\n - Alan J. Perlis"
"A language that doesn't affect the way you think about programming, is not worth knowing.\n - Alan J. Perlis"
"Wherever there is modularity there is the potential for misunderstanding: Hiding information implies a need to check communication.\n - Alan J. Perlis"
"Optimization hinders evolution.\n - Alan J. Perlis"
"A good system can't have a weak command language.\n - Alan J. Perlis"
"To understand a program you must become both the machine and the program.\n - Alan J. Perlis"
"Perhaps if we wrote programs from childhood on, as adults we'd be able to read them.\n - Alan J. Perlis"
"One can only display complex information in the mind. Like seeing, movement or flow or alteration of view is more important than the static picture, no matter how lovely.\n - Alan J. Perlis"
"There will always be things we wish to say in our programs that in all known languages can only be said poorly.\n - Alan J. Perlis"
"Once you understand how to write a program get someone else to write it.\n - Alan J. Perlis"
"Around computers it is difficult to find the correct unit of time to measure progress. Some cathedrals took a century to complete. Can you imagine the grandeur and scope of a program that would take as long?\n - Alan J. Perlis"
"For systems, the analogue of a face-lift is to add to the control graph an edge that creates a cycle, not just an additional node.\n - Alan J. Perlis"
"In programming, everything we do is a special case of something more general -- and often we know it too quickly.\n - Alan J. Perlis"
"Simplicity does not precede complexity, but follows it.\n - Alan J. Perlis"
"Programmers are not to be measured by their ingenuity and their logic but by the completeness of their case analysis.\n - Alan J. Perlis"
"The eleventh commandment was \"Thou Shalt Compute\" or \"Thou Shalt Not Compute\" - I forget which.\n - Alan J. Perlis"
"The string is a stark data structure and everywhere it is passed there is much duplication of process. It is a perfect vehicle for hiding information.\n - Alan J. Perlis"
"Everyone can be taught to sculpt: Michelangelo would have had to be taught not to. So it is with great programmers.\n - Alan J. Perlis"
"The use of a program to prove the 4-color theorem will not change mathematics - it merely demonstrates that the theorem, a challenge for a century, is probably not important to mathematics.\n - Alan J. Perlis"
"The most important computer is the one that rages in our skulls and ever seeks that satisfactory external emulator. The standarization of real computers would be a disaster - and so it probably won't happen.\n - Alan J. Perlis"
"Structured Programming supports the law of the excluded middle.\n - Alan J. Perlis"
"Re graphics: A picture is worth 10K words - but only those to describe the picture. Hardly any sets of 10K words can be adequately described with pictures.\n - Alan J. Perlis"
"There are two ways to write error-free programs; only the third one works.\n - Alan J. Perlis"
"Some programming languages manage to absorb change, but withstand progress.\n - Alan J. Perlis"
"You can measure a programmer's perspective by noting his attitude on the continuing vitality of FORTRAN.\n - Alan J. Perlis"
"In software systems, it is often the early bird that makes the worm.\n - Alan J. Perlis"
"Sometimes I think the only universal in the computing field is the fetch-execute cycle.\n - Alan J. Perlis"
"The goal of computation is the emulation of our synthetic abilities, not the understanding of our analytic ones.\n - Alan J. Perlis"
"Like punning, programming is a play on words.\n - Alan J. Perlis"
"As Will Rogers would have said, \"There is no such thing as a free variable.\"\n - Alan J. Perlis"
"The best book on programming for the layman is \"Alice in Wonderland\"; but that's because it's the best book on anything for the layman.\n - Alan J. Perlis"
"Giving up on assembly language was the apple in our Garden of Eden: Languages whose use squanders machine cycles are sinful. The LISP machine now permits LISP programmers to abandon bra and fig-leaf.\n - Alan J. Perlis"
"When we understand knowledge-based systems, it will be as before -- except our fingertips will have been singed.\n - Alan J. Perlis"
"Bringing computers into the home won't change either one, but may revitalize the corner saloon.\n - Alan J. Perlis"
"Systems have sub-systems and sub-systems have sub-systems and so on ad infinitum - which is why we're always starting over.\n - Alan J. Perlis"
"So many good ideas are never heard from again once they embark in a voyage on the semantic gulf.\n - Alan J. Perlis"
"Beware of the Turing tar-pit in which everything is possible but nothing of interest is easy.\n - Alan J. Perlis"
"A LISP programmer knows the value of everything, but the cost of nothing.\n - Alan J. Perlis"
"Software is under a constant tension. Being symbolic it is arbitrarily perfectible; but also it is arbitrarily changeable.\n - Alan J. Perlis"
"It is easier to change the specification to fit the program than vice versa.\n - Alan J. Perlis"
"Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it.\n - Alan J. Perlis"
"In English every word can be verbed. Would that it were so in our programming languages.\n - Alan J. Perlis"
"In seeking the unattainable, simplicity only gets in the way.\n - Alan J. Perlis"
"In programming, as in everything else, to be in error is to be reborn.\n - Alan J. Perlis"
"In computing, invariants are ephemeral.\n - Alan J. Perlis"
"When we write programs that \"learn\", it turns out that we do and they don't.\n - Alan J. Perlis"
"Often it is the means that justify the ends: Goals advance technique and technique survives even when goal structures crumble.\n - Alan J. Perlis"
"Make no mistake about it: Computers process numbers - not symbols. We measure our understanding (and control) by the extent to which we can arithmetize an activity.\n - Alan J. Perlis"
"Making something variable is easy. Controlling duration of constancy is the trick.\n - Alan J. Perlis"
"Think of all the psychic energy expended in seeking a fundamental distinction between \"algorithm\" and \"program\".\n - Alan J. Perlis"
"If we believe in data structures, we must believe in independent (hence simultaneous) processing. For why else would we collect items within a structure? Why do we tolerate languages that give us the one without the other?\n - Alan J. Perlis"
"In a 5 year period we get one superb programming language. Only we can't control when the 5 year period will be.\n - Alan J. Perlis"
"Over the centuries the Indians developed sign language for communicating phenomena of interest. Programmers from different tribes (FORTRAN, LISP, ALGOL, SNOBOL, etc.) could use one that doesn't require them to carry a blackboard on their ponies.\n - Alan J. Perlis"
"Documentation is like term insurance: It satisfies because almost no one who subscribes to it depends on its benefits.\n - Alan J. Perlis"
"An adequate bootstrap is a contradiction in terms.\n - Alan J. Perlis"
"It is not a language's weakness but its strengths that control the gradient of its change: Alas, a language never escapes its embryonic sac.\n - Alan J. Perlis"
"Is it possible that software is not like anything else, that it is meant to be discarded: that the whole point is to see it as a soap bubble?\n - Alan J. Perlis"
"Because of its vitality, the computing field is always in desperate need of new cliches: Banality soothes our nerves.\n - Alan J. Perlis"
"It is the user who should parameterize procedures, not their creators.\n - Alan J. Perlis"
"The cybernetic exchange between man, computer and algorithm is like a game of musical chairs: The frantic search for balance always leaves one of the three standing ill at ease.\n - Alan J. Perlis"
"If your computer speaks English, it was probably made in Japan.\n - Alan J. Perlis"
"A year spent in artificial intelligence is enough to make one believe in God.\n - Alan J. Perlis"
"Prolonged contact with the computer turns mathematicians into clerks and vice versa.\n - Alan J. Perlis"
"In computing, turning the obvious into the useful is a living definition of the word \"frustration\".\n - Alan J. Perlis"
"We are on the verge: Today our program proved Fermat's next-to-last theorem.\n - Alan J. Perlis"
"What is the difference between a Turing machine and the modern computer? It's the same as that between Hillary's ascent of Everest and the establishment of a Hilton hotel on its peak.\n - Alan J. Perlis"
"Motto for a research laboratory: What we work on today, others will first think of tomorrow.\n - Alan J. Perlis"
"Though the Chinese should adore APL, it's FORTRAN they put their money on.\n - Alan J. Perlis"
"We kid ourselves if we think that the ratio of procedure to data in an active data-base system can be made arbitrarily small or even kept small.\n - Alan J. Perlis"
"We have the mini and the micro computer. In what semantic niche would the pico computer fall?\n - Alan J. Perlis"
"It is not the computer's fault that Maxwell's equations are not adequate to design the electric motor.\n - Alan J. Perlis"
"One does not learn computing by using a hand calculator, but one can forget arithmetic.\n - Alan J. Perlis"
"Computation has made the tree flower.\n - Alan J. Perlis"
"The computer reminds one of Lon Chaney -- it is the machine of a thousand faces.\n - Alan J. Perlis"
"The computer is the ultimate polluter: its feces are indistinguish- able from the food it produces.\n - Alan J. Perlis"
"When someone says \"I want a programming language in which I need only say what I wish done,\" give him a lollipop.\n - Alan J. Perlis"
"Interfaces keep things tidy, but don't accelerate growth: Functions do.\n - Alan J. Perlis"
"Don't have good ideas if you aren't willing to be responsible for them.\n - Alan J. Perlis"
"Computers don't introduce order anywhere as much as they expose opportunities.\n - Alan J. Perlis"
"When a professor insists computer science is X but not Y, have compassion for his graduate students.\n - Alan J. Perlis"
"In computing, the mean time to failure keeps getting shorter.\n - Alan J. Perlis"
"In man-machine symbiosis, it is man who must adjust: The machines can't.\n - Alan J. Perlis"
"We will never run out of things to program as long as there is a single program around.\n - Alan J. Perlis"
"Dealing with failure is easy: Work hard to improve. Success is also easy to handle: You've solved the wrong problem. Work hard to improve.\n - Alan J. Perlis"
"One can't proceed from the informal to the formal by formal means.\n - Alan J. Perlis"
"Purely applicative languages are poorly applicable.\n - Alan J. Perlis"
"The proof of a system's value is its existence.\n - Alan J. Perlis"
"You can't communicate complexity, only an awareness of it.\n - Alan J. Perlis"
"It's difficult to extract sense from strings, but they're the only communication coin we can count on.\n - Alan J. Perlis"
"The debate rages on: is PL/I Bachtrian or Dromedary?\n - Alan J. Perlis"
"Whenever two programmers meet to criticize their programs, both are silent.\n - Alan J. Perlis"
"Think of it! With VLSI we can pack 100 ENIACS in 1 sq. cm.\n - Alan J. Perlis"
"Editing is a rewording activity.\n - Alan J. Perlis"
"Why did the Roman Empire collapse? What is Latin for office automation?\n - Alan J. Perlis"
"Computer Science is embarrassed by the computer.\n - Alan J. Perlis"
"The only constructive theory connecting neuroscience and psychology will arise from the study of software.\n - Alan J. Perlis"
"Within a computer natural language is unnatural.\n - Alan J. Perlis"
"Most people find the concept of programming obvious, but the doing impossible.\n - Alan J. Perlis"
"You think you know when you can learn, are more sure when you can write, even more when you can teach, but certain when you can program.\n - Alan J. Perlis"
"It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?\n - Alan J. Perlis"
"If you can imagine a society in which the computer- robot is the only menial, you can imagine anything.\n - Alan J. Perlis"
"Programming is an unnatural act.\n - Alan J. Perlis"
"Adapting old programs to fit new machines usually means adapting new machines to behave like old ones.\n - Alan J. Perlis"
# Donald E. Knuth
# https://en.wikiquote.org/wiki/Donald_Knuth
"Beware of bugs in the above code; I have only proved it correct, not tried it.\n - Donald E. Knuth"
"Science is knowledge which we understand so well that we can teach it to a computer; and if we don't fully understand something, it is an art to deal with it.\n - Donald E. Knuth"
"In fact, my main conclusion after spending ten years of my life working on the TEX project is that software is hard. Its harder than anything else Ive ever had to do.\n - Donald E. Knuth"
"Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.\n - Donald E. Knuth"
"The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature optimization is the root of all evil (or at least most of it) in programming.\n - Donald E. Knuth"
# Edsger W. Dijkstra
# https://en.wikiquote.org/wiki/Edsger_W._Dijkstra
"Testing shows the presence, not the absence of bugs.\n - Edsger W. Dijkstra"
"The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.\n - Edsger W. Dijkstra"
"LISP has been jokingly described as \"the most intelligent way to misuse a computer\". I think that description a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts.\n - Edsger W. Dijkstra"
"Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer.\n - Edsger W. Dijkstra"
"Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better.\n - Edsger W. Dijkstra"
"My point today is that, if we wish to count lines of code, we should not regard them as \"lines produced\" but as \"lines spent\": the current conventional wisdom is so foolish as to book that count on the wrong side of the ledger.\n - Edsger W. Dijkstra"
# mics
"There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies.\n - C.A.R. Hoare"
"There are only two hard things in Computer Science: cache invalidation and naming things.\n - Phil Karlton"
"There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors.\n - https://martinfowler.com/bliki/TwoHardThings.html"
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.\n - Martin Golding"
"The trouble with programmers is that you can never tell what a programmer is doing until its too late.\n - Seymour Cray"
"First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack.\n - George Carrette"
"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.\n - Brian W. Kernighan"
"Measuring programming progress by lines of code is like measuring aircraft building progress by weight.\n - Bill Gates"
"The best programmers are not marginally better than merely good ones. They are an order-of-magnitude better, measured by whatever standard: conceptual creativity, speed, ingenuity of design, or problem-solving ability.\n - Randall E. Stross"
"For a long time it puzzled me how something so expensive, so leading edge, could be so useless. And then it occurred to me that a computer is a stupid machine with the ability to do incredibly smart things, while computer programmers are smart people with the ability to do incredibly stupid things. They are, in short, a perfect match.\n - Bill Bryson"
"You cant have great software without a great team, and most software teams behave like dysfunctional families.\n - Jim McCarthy"
"Incorrect documentation is often worse than no documentation.\n - Bertrand Meyer"
"Correctness is clearly the prime quality. If a system does not do what it is supposed to do, then everything else about it matters little.\n - Bertrand Meyer"
"I would love to change the world, but they won't give me the source code.\n - Anonymous"
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand.\n - Martin Fowler"
"I am not a great programmer; I am just a good programmer with great habits.\n - Kent Beck"
"A Computer is a state machine. Threads are for people who can't program state machines.\n - Alan Cox"
"Not everything worth doing is worth doing well.\n - Tom West"
"Peace comes from thinking.\n - N.S.A"
)
_zp_hq::print_quote "${_zp_hq_hacker_quotes[RANDOM % $#_zp_hq_hacker_quotes + 1]}"

View file

@ -0,0 +1,5 @@
#!/bin/bash
tmpFile="$(mktemp -u)"
curl -so "$tmpFile" https://ohmyposh.dev/install.sh
bash "$tmpFile" -d "$HOME"/.local/bin

View file

@ -0,0 +1,24 @@
##!/usr/bin/env bash
case "$1" in
"dad")
joke=$(curl -sH "Accept: text/plain" 'https://icanhazdadjoke.com/')
echo "Daily Dad Joke: $joke"
;;
"bofh")
file="$HOME/.local/share/bofh"
lines=$(nl "$file" | tail -n 1 | awk '{print $1}')
echo -n "Daily BOFH Excuse: "
awk 'NR=='$((1 + RANDOM % lines ))'{print;exit}' "$file"
;;
"hq")
file="$HOME/.local/share/hackerquotes/$2"
lines=$(nl "$file" | tail -n 1 | awk '{print $1}')
echo -n "Daily Hackerquote: "
awk 'NR=='$((1 + RANDOM % $lines ))'{print;exit}' "$file"
;;
"fact")
echo "Daily Facts:"
curl -s 'https://randomfactgenerator.net/' | awk -v RS='</div>' '/<div class='\''f'\''>/{gsub(/.*<div class='\''f'\''>/,""); print "- " $0}'
;;
esac

View file

@ -0,0 +1,9 @@
#!/bin/bash
newestVersion="$(curl -sL https://api.github.com/repos/JanDeDobbeleer/oh-my-posh/releases/latest | jq -r '.name')"
localVersion="v$(oh-my-posh version)"
tmpFile="$(mktemp -u)"
test "$newestVersion" != "$localVersion" && {
curl -so "$tmpFile" https://ohmyposh.dev/install.sh
bash "$tmpFile"
}

View file

@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -euo pipefail
ZJ_LAYOUT_DIR=$(zellij setup --check | grep "LAYOUT DIR" - | grep -o '".*"' - | tr -d '"')
if [[ -d "${ZJ_LAYOUT_DIR}" ]]; then
ZJ_LAYOUT="$ZJ_LAYOUT_DIR/$(fd --type file . "${ZJ_LAYOUT_DIR}" | sed 's|.*/||' | fzf || exit)"
zellij --layout "${ZJ_LAYOUT}"
fi

View file

@ -0,0 +1,10 @@
#!/usr/bin/env bash
ZJ_SESSIONS=$(zellij list-sessions)
NO_SESSIONS=$(echo "${ZJ_SESSIONS}" | wc -l)
if [ "${NO_SESSIONS}" -ge 2 ]; then
zellij attach \
"$(echo "${ZJ_SESSIONS}" | fzf | cut -d' ' -f1)"
else
zellij attach -c
fi

View file

@ -194,7 +194,7 @@ Did you pay the new Support Fee?
We only support a 1200 bps connection. We only support a 1200 bps connection.
We only support a 28000 bps connection. We only support a 28000 bps connection.
Me no internet, only janitor, me just wax floors. Me no internet, only janitor, me just wax floors.
I'm sorry a PPC won't do, you need an Intel to connect with us. I'm sorry a pentium won't do, you need an SGI to connect with us.
Post-it Note Sludge leaked into the monitor. Post-it Note Sludge leaked into the monitor.
the curls in your keyboard cord are losing electricity. the curls in your keyboard cord are losing electricity.
The monitor needs another box of pixels. The monitor needs another box of pixels.
@ -222,9 +222,7 @@ The mainframe needs to rest. It's getting old, you know.
I'm not sure. Try calling the Internet's head office -- it's in the book. I'm not sure. Try calling the Internet's head office -- it's in the book.
The lines are all busy (busied out, that is -- why let them in to begin with?). The lines are all busy (busied out, that is -- why let them in to begin with?).
Jan 9 16:41:27 huber su: 'su root' succeeded for .... on /dev/pts/1 Jan 9 16:41:27 huber su: 'su root' succeeded for .... on /dev/pts/1
It's those computer people in New York City. They keep stuffing things up. It's those computer people in X {city of world}. They keep stuffing things up.
It's those computer people in Houston. They keep stuffing things up.
It's those computer people in New Delhi. They keep stuffing things up.
A star wars satellite accidently blew up the WAN. A star wars satellite accidently blew up the WAN.
Fatal error right in front of screen Fatal error right in front of screen
That function is not currently supported, but Bill Gates assures us it will be featured in the next upgrade. That function is not currently supported, but Bill Gates assures us it will be featured in the next upgrade.
@ -245,18 +243,13 @@ Software uses US measurements, but the OS is in metric...
The computer fleetly, mouse and all. The computer fleetly, mouse and all.
Your cat tried to eat the mouse. Your cat tried to eat the mouse.
The Borg tried to assimilate your system. Resistance is futile. The Borg tried to assimilate your system. Resistance is futile.
It must have been the lightning storm we had yesterday. It must have been the lightning storm we had (yesterday) (last week) (last month)
It must have been the lightning storm we had last week.
It must have been the lightning storm we had last month.
Due to Federal Budget problems we have been forced to cut back on the number of users able to access the system at one time. (namely none allowed....) Due to Federal Budget problems we have been forced to cut back on the number of users able to access the system at one time. (namely none allowed....)
Too much radiation coming from the soil. Too much radiation coming from the soil.
Unfortunately we have run out of bits/bytes/whatever. Don't worry, the next supply will be coming next week. Unfortunately we have run out of bits/bytes/whatever. Don't worry, the next supply will be coming next week.
Program load too heavy for processor to lift. Program load too heavy for processor to lift.
Processes running slowly due to weak power supply Processes running slowly due to weak power supply
Our ISP is having switching problems. Our ISP is having {switching,routing,SMDS,frame relay} problems
Our ISP is having routing problems.
Our ISP is having power problems.
Our ISP is having connection problems.
We've run out of licenses We've run out of licenses
Interference from lunar radiation Interference from lunar radiation
Standing room only on the bus. Standing room only on the bus.
@ -326,7 +319,7 @@ Your EMAIL is now being delivered by the USPS.
Your computer hasn't been returning all the bits it gets from the Internet. Your computer hasn't been returning all the bits it gets from the Internet.
You've been infected by the Telescoping Hubble virus. You've been infected by the Telescoping Hubble virus.
Scheduled global CPU outage Scheduled global CPU outage
Your PPC has a heating problem - try cooling it with ice cold water.(Do not turn off your computer, you do not want to cool down the PPC Chip while he isn't working, do you?) Your Pentium has a heating problem - try cooling it with ice cold water.(Do not turn off your computer, you do not want to cool down the Pentium Chip while he isn't working, do you?)
Your processor has processed too many instructions. Turn it off immediately, do not type any commands!! Your processor has processed too many instructions. Turn it off immediately, do not type any commands!!
Your packets were eaten by the terminator Your packets were eaten by the terminator
Your processor does not develop enough heat. Your processor does not develop enough heat.
@ -344,16 +337,13 @@ the xy axis in the trackball is coordinated with the summer solstice
the butane lighter causes the pincushioning the butane lighter causes the pincushioning
old inkjet cartridges emanate barium-based fumes old inkjet cartridges emanate barium-based fumes
manager in the cable duct manager in the cable duct
We'll fix that in the next upgrade. We'll fix that in the next (upgrade, update, patch release, service pack).
We'll fix that in the next update.
We'll fix that in the next patch release.
We'll fix that in the next service pack.
HTTPD Error 666 : BOFH was here HTTPD Error 666 : BOFH was here
HTTPD Error 4004 : very old Motorola cpu - insufficient processing power HTTPD Error 4004 : very old Intel cpu - insufficient processing power
The ATM board has run out of 10 pound notes. We are having a whip round to refill it, care to contribute ? The ATM board has run out of 10 pound notes. We are having a whip round to refill it, care to contribute ?
Network failure - call NBC Network failure - call NBC
Having to manually track the satellite. Having to manually track the satellite.
Your computer had suffered a memory leak, and we are waiting for them to be topped off. Your/our computer(s) had suffered a memory leak, and we are waiting for them to be topped up.
The rubber band broke The rubber band broke
We're on Token Ring, and it looks like the token got loose. We're on Token Ring, and it looks like the token got loose.
Stray Alpha Particles from memory packaging caused Hard Memory Error on Server. Stray Alpha Particles from memory packaging caused Hard Memory Error on Server.
@ -470,6 +460,10 @@ Power surges on the Underground.
Don't worry; it's been deprecated. The new one is worse. Don't worry; it's been deprecated. The new one is worse.
Excess condensation in cloud network Excess condensation in cloud network
It is a layer 8 problem It is a layer 8 problem
The math co-processor had an overflow error that leaked out and shorted the RAM
Leap second overloaded RHEL6 servers
DNS server drank too much and had a hiccup
Your machine had the fuses in backwards.
Foxconn factory caught fire Foxconn factory caught fire
insufficient data; cannot compute insufficient data; cannot compute
Please press all keys simultaneously to continue working. Please press all keys simultaneously to continue working.

View file

@ -0,0 +1,6 @@
Testing shows the presence, not the absence of bugs. - Edsger W. Dijkstra
The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague. - Edsger W. Dijkstra
LISP has been jokingly described as 'the most intelligent way to misuse a computer'. I think that description a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts. - Edsger W. Dijkstra
Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer. - Edsger W. Dijkstra
Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better. - Edsger W. Dijkstra
My point today is that, if we wish to count lines of code, we should not regard them as 'lines produced' but as 'lines spent': the current conventional wisdom is so foolish as to book that count on the wrong side of the ledger. - Edsger W. Dijkstra

View file

@ -0,0 +1,5 @@
Beware of bugs in the above code; I have only proved it correct, not tried it. - Donald E. Knuth
Science is knowledge which we understand so well that we can teach it to a computer; and if we don't fully understand something, it is an art to deal with it. - Donald E. Knuth
In fact, my main conclusion after spending ten years of my life working on the TEX project is that software is hard. Its harder than anything else Ive ever had to do. - Donald E. Knuth
Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do. - Donald E. Knuth
The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature optimization is the root of all evil (or at least most of it) in programming. - Donald E. Knuth

View file

@ -0,0 +1,19 @@
There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies. - C.A.R. Hoare
There are only two hard things in Computer Science: cache invalidation and naming things. - Phil Karlton
There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors. - https://martinfowler.com/bliki/TwoHardThings.html
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. - Martin Golding
The trouble with programmers is that you can never tell what a programmer is doing until its too late. - Seymour Cray
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. - George Carrette
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. - Brian W. Kernighan
Measuring programming progress by lines of code is like measuring aircraft building progress by weight. - Bill Gates
The best programmers are not marginally better than merely good ones. They are an order-of-magnitude better, measured by whatever standard: conceptual creativity, speed, ingenuity of design, or problem-solving ability. - Randall E. Stross
For a long time it puzzled me how something so expensive, so leading edge, could be so useless. And then it occurred to me that a computer is a stupid machine with the ability to do incredibly smart things, while computer programmers are smart people with the ability to do incredibly stupid things. They are, in short, a perfect match. - Bill Bryson
You cant have great software without a great team, and most software teams behave like dysfunctional families. - Jim McCarthy
Incorrect documentation is often worse than no documentation. - Bertrand Meyer
Correctness is clearly the prime quality. If a system does not do what it is supposed to do, then everything else about it matters little. - Bertrand Meyer
I would love to change the world, but they won't give me the source code. - Anonymous
Any fool can write code that a computer can understand. Good programmers write code that humans can understand. - Martin Fowler
I am not a great programmer; I am just a good programmer with great habits. - Kent Beck
A Computer is a state machine. Threads are for people who can't program state machines. - Alan Cox
Not everything worth doing is worth doing well. - Tom West
Peace comes from thinking. - N.S.A

View file

@ -0,0 +1,120 @@
One man's constant is another man's variable. - Alan J. Perlis
Functions delay binding; data structures induce binding. Moral: Structure data late in the programming process. - Alan J. Perlis
Syntactic sugar causes cancer of the semicolon. - Alan J. Perlis
Every program is a part of some other program and rarely fits. - Alan J. Perlis
If a program manipulates a large amount of data, it does so in a small number of ways. - Alan J. Perlis
Symmetry is a complexity-reducing concept (co-routines include subroutines); seek it everywhere. - Alan J. Perlis
It is easier to write an incorrect program than understand a correct one. - Alan J. Perlis
A programming language is low level when its programs require attention to the irrelevant. - Alan J. Perlis
It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures. - Alan J. Perlis
Get into a rut early: Do the same process the same way. Accumulate idioms. Standardize. The only difference(!) between Shakespeare and you was the size of his idiom list - not the size of his vocabulary. - Alan J. Perlis
If you have a procedure with ten parameters, you probably missed some. - Alan J. Perlis
Recursion is the root of computation since it trades description for time. - Alan J. Perlis
If two people write exactly the same program, each should be put into microcode and then they certainly won't be the same. - Alan J. Perlis
In the long run every program becomes rococo - then rubble. - Alan J. Perlis
Everything should be built top-down, except the first time. - Alan J. Perlis
Every program has (at least) two purposes: the one for which it was written, and another for which it wasn't. - Alan J. Perlis
If a listener nods his head when you're explaining your program, wake him up. - Alan J. Perlis
A program without a loop and a structured variable isn't worth writing. - Alan J. Perlis
A language that doesn't affect the way you think about programming, is not worth knowing. - Alan J. Perlis
Wherever there is modularity there is the potential for misunderstanding: Hiding information implies a need to check communication. - Alan J. Perlis
Optimization hinders evolution. - Alan J. Perlis
A good system can't have a weak command language. - Alan J. Perlis
To understand a program you must become both the machine and the program. - Alan J. Perlis
Perhaps if we wrote programs from childhood on, as adults we'd be able to read them. - Alan J. Perlis
One can only display complex information in the mind. Like seeing, movement or flow or alteration of view is more important than the static picture, no matter how lovely. - Alan J. Perlis
There will always be things we wish to say in our programs that in all known languages can only be said poorly. - Alan J. Perlis
Once you understand how to write a program get someone else to write it. - Alan J. Perlis
Around computers it is difficult to find the correct unit of time to measure progress. Some cathedrals took a century to complete. Can you imagine the grandeur and scope of a program that would take as long? - Alan J. Perlis
For systems, the analogue of a face-lift is to add to the control graph an edge that creates a cycle, not just an additional node. - Alan J. Perlis
In programming, everything we do is a special case of something more general -- and often we know it too quickly. - Alan J. Perlis
Simplicity does not precede complexity, but follows it. - Alan J. Perlis
Programmers are not to be measured by their ingenuity and their logic but by the completeness of their case analysis. - Alan J. Perlis
The eleventh commandment was \Thou Shalt Compute\ or \Thou Shalt Not Compute\ - I forget which. - Alan J. Perlis
The string is a stark data structure and everywhere it is passed there is much duplication of process. It is a perfect vehicle for hiding information. - Alan J. Perlis
Everyone can be taught to sculpt: Michelangelo would have had to be taught not to. So it is with great programmers. - Alan J. Perlis
The use of a program to prove the 4-color theorem will not change mathematics - it merely demonstrates that the theorem, a challenge for a century, is probably not important to mathematics. - Alan J. Perlis
The most important computer is the one that rages in our skulls and ever seeks that satisfactory external emulator. The standarization of real computers would be a disaster - and so it probably won't happen. - Alan J. Perlis
Structured Programming supports the law of the excluded middle. - Alan J. Perlis
Re graphics: A picture is worth 10K words - but only those to describe the picture. Hardly any sets of 10K words can be adequately described with pictures. - Alan J. Perlis
There are two ways to write error-free programs; only the third one works. - Alan J. Perlis
Some programming languages manage to absorb change, but withstand progress. - Alan J. Perlis
You can measure a programmer's perspective by noting his attitude on the continuing vitality of FORTRAN. - Alan J. Perlis
In software systems, it is often the early bird that makes the worm. - Alan J. Perlis
Sometimes I think the only universal in the computing field is the fetch-execute cycle. - Alan J. Perlis
The goal of computation is the emulation of our synthetic abilities, not the understanding of our analytic ones. - Alan J. Perlis
Like punning, programming is a play on words. - Alan J. Perlis
As Will Rogers would have said, \There is no such thing as a free variable. - Alan J. Perlis
The best book on programming for the layman is \Alice in Wonderland\; but that's because it's the best book on anything for the layman. - Alan J. Perlis
Giving up on assembly language was the apple in our Garden of Eden: Languages whose use squanders machine cycles are sinful. The LISP machine now permits LISP programmers to abandon bra and fig-leaf. - Alan J. Perlis
When we understand knowledge-based systems, it will be as before -- except our fingertips will have been singed. - Alan J. Perlis
Bringing computers into the home won't change either one, but may revitalize the corner saloon. - Alan J. Perlis
Systems have sub-systems and sub-systems have sub-systems and so on ad infinitum - which is why we're always starting over. - Alan J. Perlis
So many good ideas are never heard from again once they embark in a voyage on the semantic gulf. - Alan J. Perlis
Beware of the Turing tar-pit in which everything is possible but nothing of interest is easy. - Alan J. Perlis
A LISP programmer knows the value of everything, but the cost of nothing. - Alan J. Perlis
Software is under a constant tension. Being symbolic it is arbitrarily perfectible; but also it is arbitrarily changeable. - Alan J. Perlis
It is easier to change the specification to fit the program than vice versa. - Alan J. Perlis
Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it. - Alan J. Perlis
In English every word can be verbed. Would that it were so in our programming languages. - Alan J. Perlis
In seeking the unattainable, simplicity only gets in the way. - Alan J. Perlis
In programming, as in everything else, to be in error is to be reborn. - Alan J. Perlis
In computing, invariants are ephemeral. - Alan J. Perlis
When we write programs that \learn\, it turns out that we do and they don't. - Alan J. Perlis
Often it is the means that justify the ends: Goals advance technique and technique survives even when goal structures crumble. - Alan J. Perlis
Make no mistake about it: Computers process numbers - not symbols. We measure our understanding (and control) by the extent to which we can arithmetize an activity. - Alan J. Perlis
Making something variable is easy. Controlling duration of constancy is the trick. - Alan J. Perlis
Think of all the psychic energy expended in seeking a fundamental distinction between 'algorithm' and 'program'. - Alan J. Perlis
If we believe in data structures, we must believe in independent (hence simultaneous) processing. For why else would we collect items within a structure? Why do we tolerate languages that give us the one without the other? - Alan J. Perlis
In a 5 year period we get one superb programming language. Only we can't control when the 5 year period will be. - Alan J. Perlis
Over the centuries the Indians developed sign language for communicating phenomena of interest. Programmers from different tribes (FORTRAN, LISP, ALGOL, SNOBOL, etc.) could use one that doesn't require them to carry a blackboard on their ponies. - Alan J. Perlis
Documentation is like term insurance: It satisfies because almost no one who subscribes to it depends on its benefits. - Alan J. Perlis
An adequate bootstrap is a contradiction in terms. - Alan J. Perlis
It is not a language's weakness but its strengths that control the gradient of its change: Alas, a language never escapes its embryonic sac. - Alan J. Perlis
Is it possible that software is not like anything else, that it is meant to be discarded: that the whole point is to see it as a soap bubble? - Alan J. Perlis
Because of its vitality, the computing field is always in desperate need of new cliches: Banality soothes our nerves. - Alan J. Perlis
It is the user who should parameterize procedures, not their creators. - Alan J. Perlis
The cybernetic exchange between man, computer and algorithm is like a game of musical chairs: The frantic search for balance always leaves one of the three standing ill at ease. - Alan J. Perlis
If your computer speaks English, it was probably made in Japan. - Alan J. Perlis
A year spent in artificial intelligence is enough to make one believe in God. - Alan J. Perlis
Prolonged contact with the computer turns mathematicians into clerks and vice versa. - Alan J. Perlis
In computing, turning the obvious into the useful is a living definition of the word \frustration\. - Alan J. Perlis
We are on the verge: Today our program proved Fermat's next-to-last theorem. - Alan J. Perlis
What is the difference between a Turing machine and the modern computer? It's the same as that between Hillary's ascent of Everest and the establishment of a Hilton hotel on its peak. - Alan J. Perlis
Motto for a research laboratory: What we work on today, others will first think of tomorrow. - Alan J. Perlis
Though the Chinese should adore APL, it's FORTRAN they put their money on. - Alan J. Perlis
We kid ourselves if we think that the ratio of procedure to data in an active data-base system can be made arbitrarily small or even kept small. - Alan J. Perlis
We have the mini and the micro computer. In what semantic niche would the pico computer fall? - Alan J. Perlis
It is not the computer's fault that Maxwell's equations are not adequate to design the electric motor. - Alan J. Perlis
One does not learn computing by using a hand calculator, but one can forget arithmetic. - Alan J. Perlis
Computation has made the tree flower. - Alan J. Perlis
The computer reminds one of Lon Chaney -- it is the machine of a thousand faces. - Alan J. Perlis
The computer is the ultimate polluter: its feces are indistinguish- able from the food it produces. - Alan J. Perlis
When someone says \I want a programming language in which I need only say what I wish done, give him a lollipop. - Alan J. Perlis
Interfaces keep things tidy, but don't accelerate growth: Functions do. - Alan J. Perlis
Don't have good ideas if you aren't willing to be responsible for them. - Alan J. Perlis
Computers don't introduce order anywhere as much as they expose opportunities. - Alan J. Perlis
When a professor insists computer science is X but not Y, have compassion for his graduate students. - Alan J. Perlis
In computing, the mean time to failure keeps getting shorter. - Alan J. Perlis
In man-machine symbiosis, it is man who must adjust: The machines can't. - Alan J. Perlis
We will never run out of things to program as long as there is a single program around. - Alan J. Perlis
Dealing with failure is easy: Work hard to improve. Success is also easy to handle: You've solved the wrong problem. Work hard to improve. - Alan J. Perlis
One can't proceed from the informal to the formal by formal means. - Alan J. Perlis
Purely applicative languages are poorly applicable. - Alan J. Perlis
The proof of a system's value is its existence. - Alan J. Perlis
You can't communicate complexity, only an awareness of it. - Alan J. Perlis
It's difficult to extract sense from strings, but they're the only communication coin we can count on. - Alan J. Perlis
The debate rages on: is PL/I Bachtrian or Dromedary? - Alan J. Perlis
Whenever two programmers meet to criticize their programs, both are silent. - Alan J. Perlis
Think of it! With VLSI we can pack 100 ENIACS in 1 sq. cm. - Alan J. Perlis
Editing is a rewording activity. - Alan J. Perlis
Why did the Roman Empire collapse? What is Latin for office automation? - Alan J. Perlis
Computer Science is embarrassed by the computer. - Alan J. Perlis
The only constructive theory connecting neuroscience and psychology will arise from the study of software. - Alan J. Perlis
Within a computer natural language is unnatural. - Alan J. Perlis
Most people find the concept of programming obvious, but the doing impossible. - Alan J. Perlis
You think you know when you can learn, are more sure when you can write, even more when you can teach, but certain when you can program. - Alan J. Perlis
It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical? - Alan J. Perlis
If you can imagine a society in which the computer- robot is the only menial, you can imagine anything. - Alan J. Perlis
Programming is an unnatural act. - Alan J. Perlis
Adapting old programs to fit new machines usually means adapting new machines to behave like old ones. - Alan J. Perlis

View file

@ -0,0 +1,3 @@
Talk is cheap. Show me the code. - Linus Torvalds
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program. - Linus Torvalds
I'm an egotistical bastard, and I name all my projects after myself. First Linux, now git. - Linus Torvalds

View file

@ -1,12 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQUHFPSUJkUGc0anhDVkli
VlFYNHBVUEpmZmtwdXBTSGdvdnIrSjM1M3pFCmdzWkhmVGcwckpoVXRyNjJnK01t
b0h3dVRHcDh2Q0psV1NQZ2pvYmRoSUUKLS0tIEdIVVFMQkl4enBhMHI0OU5KWGZC
aTlibTdVcWcwanduVXZ4MXMxS2xsWUEKpSA8zaN0Lpk3Mqce5kQmDktfRNT5SSW9
u7k5jfk+7yzKocqiWKB3/GIdkFauNtFguyqeMy2BUq2VOE91wW/usgrOWiUHbulp
917pa72C72eGnSc1RcpXxyd5J6EqLXLIutJAxWPnKIZcQLQyj22YWT8pYnTibkGU
bodl1uZKrfEC7I013qr3hRdrbJAi3sAKmD76Ie2RCf2ubxqJxgOiAcgoZA44ArjC
Tw4KU1sKNzimm2MA4Hjf5/yYGOF00fo/DtuJtu1jHckyynK80Ppda/AcRfbE3ByC
My5ILbJ2/q0yMO9phMmOyC6kVomjgyFARAPQXAY6CZe0JdFIESbzz0yNbA7QKWKW
o59c
-----END AGE ENCRYPTED FILE-----