Compare commits
56 Commits
4b1b60b660
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 273c4d090c | |||
| a88a419669 | |||
| b5471c5f25 | |||
| 422466e483 | |||
| ee49471228 | |||
| 802f0dd84e | |||
| 5570e58efc | |||
| 5d687eb837 | |||
| e46820b5f7 | |||
| ab9854d12f | |||
| 2e83db4b69 | |||
| b27f3fa744 | |||
| 1c845777e8 | |||
| e1eb5794c5 | |||
| b5f7738df3 | |||
| 6817507506 | |||
| 2a993c2ceb | |||
| e2069193fe | |||
| dc16123c82 | |||
| 641212f0e3 | |||
| 5e57111548 | |||
| 2e148cb31a | |||
| be76b81d6e | |||
| 815c1f4edb | |||
| 6fb2964443 | |||
| 506e8ef15e | |||
| f3f9e58805 | |||
| 966d31c6a8 | |||
| 9e59127cb2 | |||
| 22a684c1a6 | |||
| fd0ccc015b | |||
| fa735bac88 | |||
| 97664054b7 | |||
| b3637e4d6f | |||
| 10939f2ea3 | |||
| 2de91ed77b | |||
| 23bbbbdbe8 | |||
| 3f5b212d37 | |||
| dbeb4d02a4 | |||
| 673748402a | |||
| 605b30c730 | |||
| 41f219ddee | |||
| 645dc16ce1 | |||
| 67109d6f64 | |||
| 4bc5a0a6c0 | |||
| 2aa98a181b | |||
| 99bcc94970 | |||
| 0918d86c6c | |||
| 91e15f6d48 | |||
| 6240282513 | |||
| ca7d4accb9 | |||
| 202a0be14b | |||
| e63ec85def | |||
| 5723a8b677 | |||
| 380b0a9458 | |||
| de78533fde |
110
.config/OpenTabletDriver/settings.json
Normal file
110
.config/OpenTabletDriver/settings.json
Normal file
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"Revision": "0.6.6.2",
|
||||
"Profiles": [
|
||||
{
|
||||
"Tablet": "Wacom PTH-451",
|
||||
"OutputMode": {
|
||||
"Path": "OpenTabletDriver.Desktop.Output.LinuxArtistMode",
|
||||
"Settings": [],
|
||||
"Enable": true
|
||||
},
|
||||
"Filters": [],
|
||||
"AbsoluteModeSettings": {
|
||||
"Display": {
|
||||
"Width": 2560.0,
|
||||
"Height": 1440.0,
|
||||
"X": 1280.0001,
|
||||
"Y": 720.0,
|
||||
"Rotation": 0.0
|
||||
},
|
||||
"Tablet": {
|
||||
"Width": 157.48,
|
||||
"Height": 88.5825,
|
||||
"X": 78.74,
|
||||
"Y": 49.2125,
|
||||
"Rotation": 0.0
|
||||
},
|
||||
"EnableClipping": true,
|
||||
"EnableAreaLimiting": false,
|
||||
"LockAspectRatio": true
|
||||
},
|
||||
"RelativeModeSettings": {
|
||||
"XSensitivity": 10.0,
|
||||
"YSensitivity": 10.0,
|
||||
"RelativeRotation": 0.0,
|
||||
"RelativeResetDelay": "00:00:00.1000000"
|
||||
},
|
||||
"Bindings": {
|
||||
"TipActivationThreshold": 1.0,
|
||||
"TipButton": {
|
||||
"Path": "OpenTabletDriver.Desktop.Binding.AdaptiveBinding",
|
||||
"Settings": [
|
||||
{
|
||||
"Property": "Binding",
|
||||
"Value": "Tip"
|
||||
}
|
||||
],
|
||||
"Enable": true
|
||||
},
|
||||
"EraserActivationThreshold": 1.0,
|
||||
"EraserButton": {
|
||||
"Path": "OpenTabletDriver.Desktop.Binding.AdaptiveBinding",
|
||||
"Settings": [
|
||||
{
|
||||
"Property": "Binding",
|
||||
"Value": "Eraser"
|
||||
}
|
||||
],
|
||||
"Enable": true
|
||||
},
|
||||
"PenButtons": [
|
||||
{
|
||||
"Path": "OpenTabletDriver.Desktop.Binding.AdaptiveBinding",
|
||||
"Settings": [
|
||||
{
|
||||
"Property": "Binding",
|
||||
"Value": "Button 1"
|
||||
}
|
||||
],
|
||||
"Enable": true
|
||||
},
|
||||
{
|
||||
"Path": "OpenTabletDriver.Desktop.Binding.AdaptiveBinding",
|
||||
"Settings": [
|
||||
{
|
||||
"Property": "Binding",
|
||||
"Value": "Button 2"
|
||||
}
|
||||
],
|
||||
"Enable": true
|
||||
}
|
||||
],
|
||||
"AuxButtons": [
|
||||
{
|
||||
"Path": "OpenTabletDriver.Desktop.Binding.MultiKeyBinding",
|
||||
"Settings": [
|
||||
{
|
||||
"Property": "Keys",
|
||||
"Value": "Control+Z"
|
||||
}
|
||||
],
|
||||
"Enable": true
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"MouseButtons": [],
|
||||
"MouseScrollUp": null,
|
||||
"MouseScrollDown": null,
|
||||
"DisablePressure": false,
|
||||
"DisableTilt": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"LockUsableAreaDisplay": true,
|
||||
"LockUsableAreaTablet": true,
|
||||
"Tools": []
|
||||
}
|
||||
3
.config/brave-flags.conf
Normal file
3
.config/brave-flags.conf
Normal file
@@ -0,0 +1,3 @@
|
||||
--ozone-platform=wayland
|
||||
--ozone-platform-hint=wayland
|
||||
--enable-features=TouchpadOverscrollHistoryNavigation
|
||||
257
.config/btop/btop.conf
Normal file
257
.config/btop/btop.conf
Normal file
@@ -0,0 +1,257 @@
|
||||
#? Config file for btop v. 1.4.5
|
||||
|
||||
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
|
||||
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
|
||||
color_theme = "current"
|
||||
|
||||
#* If the theme set background should be shown, set to False if you want terminal background transparency.
|
||||
theme_background = True
|
||||
|
||||
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
|
||||
truecolor = True
|
||||
|
||||
#* Set to true to force tty mode regardless if a real tty has been detected or not.
|
||||
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
|
||||
force_tty = False
|
||||
|
||||
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
|
||||
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
|
||||
#* Use whitespace " " as separator between different presets.
|
||||
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
|
||||
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
|
||||
|
||||
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
|
||||
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
|
||||
vim_keys = True
|
||||
|
||||
#* Rounded corners on boxes, is ignored if TTY mode is ON.
|
||||
rounded_corners = True
|
||||
|
||||
#* Default symbols to use for graph creation, "braille", "block" or "tty".
|
||||
#* "braille" offers the highest resolution but might not be included in all fonts.
|
||||
#* "block" has half the resolution of braille but uses more common characters.
|
||||
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
|
||||
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
|
||||
graph_symbol = "braille"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_cpu = "default"
|
||||
|
||||
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_gpu = "default"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_mem = "default"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_net = "default"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_proc = "default"
|
||||
|
||||
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
|
||||
shown_boxes = "cpu mem net proc"
|
||||
|
||||
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
|
||||
update_ms = 2000
|
||||
|
||||
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
|
||||
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
|
||||
proc_sorting = "cpu lazy"
|
||||
|
||||
#* Reverse sorting order, True or False.
|
||||
proc_reversed = False
|
||||
|
||||
#* Show processes as a tree.
|
||||
proc_tree = False
|
||||
|
||||
#* Use the cpu graph colors in the process list.
|
||||
proc_colors = True
|
||||
|
||||
#* Use a darkening gradient in the process list.
|
||||
proc_gradient = True
|
||||
|
||||
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
|
||||
proc_per_core = False
|
||||
|
||||
#* Show process memory as bytes instead of percent.
|
||||
proc_mem_bytes = True
|
||||
|
||||
#* Show cpu graph for each process.
|
||||
proc_cpu_graphs = True
|
||||
|
||||
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
|
||||
proc_info_smaps = False
|
||||
|
||||
#* Show proc box on left side of screen instead of right.
|
||||
proc_left = False
|
||||
|
||||
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
|
||||
proc_filter_kernel = False
|
||||
|
||||
#* In tree-view, always accumulate child process resources in the parent process.
|
||||
proc_aggregate = False
|
||||
|
||||
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
|
||||
#* Select from a list of detected attributes from the options menu.
|
||||
cpu_graph_upper = "Auto"
|
||||
|
||||
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
|
||||
#* Select from a list of detected attributes from the options menu.
|
||||
cpu_graph_lower = "Auto"
|
||||
|
||||
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
|
||||
show_gpu_info = "Auto"
|
||||
|
||||
#* Toggles if the lower CPU graph should be inverted.
|
||||
cpu_invert_lower = True
|
||||
|
||||
#* Set to True to completely disable the lower CPU graph.
|
||||
cpu_single_graph = False
|
||||
|
||||
#* Show cpu box at bottom of screen instead of top.
|
||||
cpu_bottom = False
|
||||
|
||||
#* Shows the system uptime in the CPU box.
|
||||
show_uptime = True
|
||||
|
||||
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
|
||||
show_cpu_watts = True
|
||||
|
||||
#* Show cpu temperature.
|
||||
check_temp = True
|
||||
|
||||
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
|
||||
cpu_sensor = "Auto"
|
||||
|
||||
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
|
||||
show_coretemp = True
|
||||
|
||||
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
|
||||
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
|
||||
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
|
||||
#* Example: "4:0 5:1 6:3"
|
||||
cpu_core_map = ""
|
||||
|
||||
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
|
||||
temp_scale = "celsius"
|
||||
|
||||
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
|
||||
base_10_sizes = False
|
||||
|
||||
#* Show CPU frequency.
|
||||
show_cpu_freq = True
|
||||
|
||||
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
|
||||
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
|
||||
clock_format = "%X"
|
||||
|
||||
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
|
||||
background_update = True
|
||||
|
||||
#* Custom cpu model name, empty string to disable.
|
||||
custom_cpu_name = ""
|
||||
|
||||
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
|
||||
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
|
||||
disks_filter = ""
|
||||
|
||||
#* Show graphs instead of meters for memory values.
|
||||
mem_graphs = True
|
||||
|
||||
#* Show mem box below net box instead of above.
|
||||
mem_below_net = False
|
||||
|
||||
#* Count ZFS ARC in cached and available memory.
|
||||
zfs_arc_cached = True
|
||||
|
||||
#* If swap memory should be shown in memory box.
|
||||
show_swap = True
|
||||
|
||||
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
|
||||
swap_disk = True
|
||||
|
||||
#* If mem box should be split to also show disks info.
|
||||
show_disks = True
|
||||
|
||||
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
|
||||
only_physical = True
|
||||
|
||||
#* Read disks list from /etc/fstab. This also disables only_physical.
|
||||
use_fstab = True
|
||||
|
||||
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
|
||||
zfs_hide_datasets = False
|
||||
|
||||
#* Set to true to show available disk space for privileged users.
|
||||
disk_free_priv = False
|
||||
|
||||
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
|
||||
show_io_stat = True
|
||||
|
||||
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
|
||||
io_mode = False
|
||||
|
||||
#* Set to True to show combined read/write io graphs in io mode.
|
||||
io_graph_combined = False
|
||||
|
||||
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
|
||||
#* Example: "/mnt/media:100 /:20 /boot:1".
|
||||
io_graph_speeds = ""
|
||||
|
||||
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
|
||||
net_download = 100
|
||||
|
||||
net_upload = 100
|
||||
|
||||
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
|
||||
net_auto = True
|
||||
|
||||
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
|
||||
net_sync = True
|
||||
|
||||
#* Starts with the Network Interface specified here.
|
||||
net_iface = ""
|
||||
|
||||
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
|
||||
base_10_bitrate = "Auto"
|
||||
|
||||
#* Show battery stats in top right if battery is present.
|
||||
show_battery = True
|
||||
|
||||
#* Which battery to use if multiple are present. "Auto" for auto detection.
|
||||
selected_battery = "Auto"
|
||||
|
||||
#* Show power stats of battery next to charge indicator.
|
||||
show_battery_watts = True
|
||||
|
||||
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
|
||||
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
|
||||
log_level = "WARNING"
|
||||
|
||||
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
|
||||
nvml_measure_pcie_speeds = True
|
||||
|
||||
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
|
||||
rsmi_measure_pcie_speeds = True
|
||||
|
||||
#* Horizontally mirror the GPU graph.
|
||||
gpu_mirror_graph = True
|
||||
|
||||
#* Custom gpu0 model name, empty string to disable.
|
||||
custom_gpu_name0 = ""
|
||||
|
||||
#* Custom gpu1 model name, empty string to disable.
|
||||
custom_gpu_name1 = ""
|
||||
|
||||
#* Custom gpu2 model name, empty string to disable.
|
||||
custom_gpu_name2 = ""
|
||||
|
||||
#* Custom gpu3 model name, empty string to disable.
|
||||
custom_gpu_name3 = ""
|
||||
|
||||
#* Custom gpu4 model name, empty string to disable.
|
||||
custom_gpu_name4 = ""
|
||||
|
||||
#* Custom gpu5 model name, empty string to disable.
|
||||
custom_gpu_name5 = ""
|
||||
3
.config/chromium-flags.conf
Normal file
3
.config/chromium-flags.conf
Normal file
@@ -0,0 +1,3 @@
|
||||
--ozone-platform=wayland
|
||||
--ozone-platform-hint=wayland
|
||||
--enable-features=TouchpadOverscrollHistoryNavigation
|
||||
6
.config/direnv/direnvrc
Normal file
6
.config/direnv/direnvrc
Normal file
@@ -0,0 +1,6 @@
|
||||
# Better support for Nix flakes
|
||||
use_flake() {
|
||||
watch_file flake.nix
|
||||
watch_file flake.lock
|
||||
eval "$(nix print-dev-env)"
|
||||
}
|
||||
1
.config/elephant/calc.toml
Normal file
1
.config/elephant/calc.toml
Normal file
@@ -0,0 +1 @@
|
||||
async = false
|
||||
3
.config/elephant/desktopapplications.toml
Normal file
3
.config/elephant/desktopapplications.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
show_actions = false
|
||||
only_search_title = true
|
||||
history = false
|
||||
1
.config/elephant/symbols.toml
Normal file
1
.config/elephant/symbols.toml
Normal file
@@ -0,0 +1 @@
|
||||
command = 'wl-copy && hyprctl dispatch sendshortcut "SHIFT, Insert,"'
|
||||
4
.config/environment.d/fcitx.conf
Normal file
4
.config/environment.d/fcitx.conf
Normal file
@@ -0,0 +1,4 @@
|
||||
# INPUT_METHOD=fcitx
|
||||
# QT_IM_MODULE=fcitx
|
||||
# XMODIFIERS=@im=fcitx
|
||||
# SDL_IM_MODULE=fcitx
|
||||
2
.config/fcitx5/conf/clipboard.conf
Normal file
2
.config/fcitx5/conf/clipboard.conf
Normal file
@@ -0,0 +1,2 @@
|
||||
TriggerKey=
|
||||
PastePrimaryKey=
|
||||
1
.config/fcitx5/conf/xcb.conf
Normal file
1
.config/fcitx5/conf/xcb.conf
Normal file
@@ -0,0 +1 @@
|
||||
Allow Overriding System XKB Settings=False
|
||||
@@ -1,3 +1,6 @@
|
||||
# Dynamic theme colors
|
||||
config-file = ?"~/.cache/wal/ghostty.conf"
|
||||
|
||||
confirm-close-surface=false
|
||||
|
||||
keybind = all:unconsumed:ctrl+shift+,=reload_config
|
||||
@@ -133,3 +136,37 @@ keybind = all:unconsumed:shift+arrow_left=unbind
|
||||
keybind = all:unconsumed:shift+arrow_right=unbind
|
||||
#adjust_selection:up
|
||||
keybind = all:unconsumed:shift+arrow_up=unbind
|
||||
|
||||
# Font
|
||||
font-family = "Fira Code Nerd Font"
|
||||
font-style = Regular
|
||||
font-size = 14
|
||||
|
||||
# Window
|
||||
window-theme = ghostty
|
||||
# window-padding-x = 14
|
||||
# window-padding-y = 14
|
||||
confirm-close-surface=false
|
||||
resize-overlay = never
|
||||
gtk-toolbar-style = flat
|
||||
|
||||
# Cursor styling
|
||||
cursor-style = "block"
|
||||
cursor-style-blink = false
|
||||
|
||||
# Cursor styling + SSH session terminfo
|
||||
# (all shell integration options must be passed together)
|
||||
shell-integration-features = no-cursor,ssh-env
|
||||
|
||||
# Keyboard bindings
|
||||
keybind = shift+insert=paste_from_clipboard
|
||||
keybind = control+insert=copy_to_clipboard
|
||||
|
||||
# Slowdown mouse scrolling
|
||||
mouse-scroll-multiplier = 0.95
|
||||
|
||||
# Fix general slowness on hyprland (https://github.com/ghostty-org/ghostty/discussions/3224)
|
||||
async-backend = epoll
|
||||
|
||||
background-opacity = 0.8
|
||||
background-blur = false
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
name = Chris
|
||||
[pull]
|
||||
rebase = true
|
||||
[push]
|
||||
autoSetupRemote = true
|
||||
[init]
|
||||
defaultBranch = main
|
||||
[core]
|
||||
@@ -12,3 +14,23 @@
|
||||
smudge = git-lfs smudge -- %f
|
||||
process = git-lfs filter-process
|
||||
required = true
|
||||
[alias]
|
||||
co = checkout
|
||||
br = branch
|
||||
ci = commit
|
||||
st = status
|
||||
[diff]
|
||||
algorithm = histogram # Clearer diffs on moved/edited lines
|
||||
colorMoved = plain # Highlight moved blocks in diffs
|
||||
mnemonicPrefix = true # More intuitive refs in diff output
|
||||
[commit]
|
||||
verbose = true # Include diff comment in commit message template
|
||||
[column]
|
||||
ui = auto # Output in columns when possible
|
||||
[branch]
|
||||
sort = -committerdate # Sort branches by most recent commit first
|
||||
[tag]
|
||||
sort = -version:refname # Sort version numbers as you would expect
|
||||
[rerere]
|
||||
enabled = true # Record and reuse conflict resolutions
|
||||
autoupdate = true # Apply stored conflict resolutions automatically
|
||||
|
||||
@@ -97,12 +97,32 @@ windowrule = opacity 1 1, match:class qemu
|
||||
|
||||
# Retroarch
|
||||
windowrule = fullscreen on, match:class com.libretro.RetroArch
|
||||
windowrule = workspace 5, match:class com.libretro.RetroArch
|
||||
windowrule = tag -default-opacity, match:class com.libretro.RetroArch
|
||||
windowrule = opacity 1 1, match:class com.libretro.RetroArch
|
||||
windowrule = idle_inhibit fullscreen, match:class com.libretro.RetroArch
|
||||
|
||||
# Scratchpad apps
|
||||
windowrule = workspace special:scratchpad, match:class Spotify
|
||||
windowrule = workspace special:scratchpad, match:class signal
|
||||
windowrule = workspace special:scratchpad, match:class ^(chrome-discord.com__channels_@me-Default)$
|
||||
windowrule = workspace special:scratchpad, match:class ^(chrome-web.whatsapp.com__-Default)$
|
||||
|
||||
# Float Nextcloud
|
||||
windowrule = float on, match:class com.nextcloud.desktopclient.nextcloud
|
||||
|
||||
# Position drawing
|
||||
windowrule = workspace 5, match:class (krita)
|
||||
windowrule = tag -default-opacity, match:class (krita)
|
||||
windowrule = opacity 1 1, match:class (krita)
|
||||
|
||||
# Position TV
|
||||
windowrule = workspace 7, match:class ^(chrome-youtube.com__-Default)$
|
||||
windowrule = workspace 7, match:class ^(chrome-netflix.com__-Default)$
|
||||
|
||||
# Float Steam
|
||||
windowrule = float on, match:class steam
|
||||
windowrule = workspace 7, match:class steam
|
||||
windowrule = center on, match:class steam, match:title Steam
|
||||
windowrule = tag -default-opacity, match:class steam.*
|
||||
windowrule = opacity 1 1, match:class steam.*
|
||||
@@ -112,6 +132,7 @@ windowrule = idle_inhibit fullscreen, match:class steam
|
||||
|
||||
# Float Lunar Client
|
||||
windowrule = float on, match:class lunarclient
|
||||
windowrule = workspace 7, match:class lunarclient
|
||||
windowrule = center on, match:class lunarclient
|
||||
windowrule = tag -default-opacity, match:class lunarclient
|
||||
windowrule = opacity 1 1, match:class lunarclient
|
||||
@@ -159,3 +180,4 @@ windowrule = pin on, match:title WebcamOverlay
|
||||
windowrule = no_initial_focus on, match:title WebcamOverlay
|
||||
windowrule = no_dim on, match:title WebcamOverlay
|
||||
windowrule = move (monitor_w-window_w-40) (monitor_h-window_h-40), match:title WebcamOverlay
|
||||
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
# exec-once = uwsm-app -- hypridle
|
||||
# exec-once = uwsm-app -- mako
|
||||
exec-once = uwsm-app -- hypridle
|
||||
exec-once = uwsm-app -- mako
|
||||
# exec-once = Enpass
|
||||
# exec-once = uwsm-app -- waybar
|
||||
# exec-once = uwsm-app -- fcitx5 --disable notificationitem
|
||||
# exec-once = uwsm-app -- swaybg -i ~/.config/omarchy/current/background -m fill
|
||||
# exec-once = uwsm-app -- swayosd-server
|
||||
# exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||
# exec-once = omarchy-cmd-first-run
|
||||
exec-once = uwsm-app -- fcitx5 --disable notificationitem
|
||||
exec-once = station-bg-random
|
||||
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||
|
||||
# Slow app launch fix -- set systemd vars
|
||||
exec-once = systemctl --user import-environment $(env | cut -d'=' -f 1)
|
||||
|
||||
@@ -60,68 +60,15 @@ bindd = SUPER, L, Move window focus right, movefocus, r
|
||||
bindd = SUPER, K, Move window focus up, movefocus, u
|
||||
bindd = SUPER, J, Move window focus down, movefocus, d
|
||||
|
||||
# Switch workspaces with SUPER + [1-9; 0]
|
||||
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
|
||||
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
|
||||
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
|
||||
bindd = SUPER, code:13, Switch to workspace 4, workspace, 4
|
||||
bindd = SUPER, code:14, Switch to workspace 5, workspace, 5
|
||||
bindd = SUPER, code:15, Switch to workspace 6, workspace, 6
|
||||
bindd = SUPER, code:16, Switch to workspace 7, workspace, 7
|
||||
bindd = SUPER, code:17, Switch to workspace 8, workspace, 8
|
||||
bindd = SUPER, code:18, Switch to workspace 9, workspace, 9
|
||||
bindd = SUPER, code:19, Switch to workspace 10, workspace, 10
|
||||
|
||||
# Move active window to a workspace with SUPER + SHIFT + [1-9; 0]
|
||||
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
|
||||
bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2
|
||||
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
|
||||
bindd = SUPER SHIFT, code:13, Move window to workspace 4, movetoworkspace, 4
|
||||
bindd = SUPER SHIFT, code:14, Move window to workspace 5, movetoworkspace, 5
|
||||
bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6
|
||||
bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7
|
||||
bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
|
||||
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
|
||||
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
|
||||
|
||||
# Move active window silently to a workspace with SUPER + SHIFT + ALT + [1-9; 0]
|
||||
bindd = SUPER SHIFT ALT, code:10, Move window silently to workspace 1, movetoworkspacesilent, 1
|
||||
bindd = SUPER SHIFT ALT, code:11, Move window silently to workspace 2, movetoworkspacesilent, 2
|
||||
bindd = SUPER SHIFT ALT, code:12, Move window silently to workspace 3, movetoworkspacesilent, 3
|
||||
bindd = SUPER SHIFT ALT, code:13, Move window silently to workspace 4, movetoworkspacesilent, 4
|
||||
bindd = SUPER SHIFT ALT, code:14, Move window silently to workspace 5, movetoworkspacesilent, 5
|
||||
bindd = SUPER SHIFT ALT, code:15, Move window silently to workspace 6, movetoworkspacesilent, 6
|
||||
bindd = SUPER SHIFT ALT, code:16, Move window silently to workspace 7, movetoworkspacesilent, 7
|
||||
bindd = SUPER SHIFT ALT, code:17, Move window silently to workspace 8, movetoworkspacesilent, 8
|
||||
bindd = SUPER SHIFT ALT, code:18, Move window silently to workspace 9, movetoworkspacesilent, 9
|
||||
bindd = SUPER SHIFT ALT, code:19, Move window silently to workspace 10, movetoworkspacesilent, 10
|
||||
|
||||
# Control scratchpad
|
||||
bindd = SUPER, S, Toggle scratchpad, togglespecialworkspace, scratchpad
|
||||
bindd = SUPER ALT, S, Move window to scratchpad, movetoworkspacesilent, special:scratchpad
|
||||
|
||||
# TAB between workspaces
|
||||
bindd = SUPER, TAB, Next workspace, workspace, e+1
|
||||
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
|
||||
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
|
||||
|
||||
# Move workspaces to other monitors
|
||||
bindd = SUPER SHIFT ALT, LEFT, Move workspace to left monitor, movecurrentworkspacetomonitor, l
|
||||
bindd = SUPER SHIFT ALT, RIGHT, Move workspace to right monitor, movecurrentworkspacetomonitor, r
|
||||
bindd = SUPER SHIFT ALT, UP, Move workspace to up monitor, movecurrentworkspacetomonitor, u
|
||||
bindd = SUPER SHIFT ALT, DOWN, Move workspace to down monitor, movecurrentworkspacetomonitor, d
|
||||
|
||||
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys
|
||||
bindd = SUPER SHIFT, LEFT, Swap window to the left, swapwindow, l
|
||||
bindd = SUPER SHIFT, RIGHT, Swap window to the right, swapwindow, r
|
||||
bindd = SUPER SHIFT, UP, Swap window up, swapwindow, u
|
||||
bindd = SUPER SHIFT, DOWN, Swap window down, swapwindow, d
|
||||
|
||||
# Cycle through applications on active workspace
|
||||
bindd = ALT, TAB, Cycle to next window, cyclenext
|
||||
bindd = ALT SHIFT, TAB, Cycle to prev window, cyclenext, prev
|
||||
bindd = ALT, TAB, Reveal active window on top, bringactivetotop
|
||||
bindd = ALT SHIFT, TAB, Reveal active window on top, bringactivetotop
|
||||
bindd = SUPER, TAB, Cycle to next window, cyclenext, visible
|
||||
bindd = SUPER SHIFT, TAB, Cycle to prev window, cyclenext, visible prev
|
||||
bindd = SUPER, TAB, Reveal active window on top, bringactivetotop
|
||||
bindd = SUPER SHIFT, TAB, Reveal active window on top, bringactivetotop
|
||||
|
||||
# Resize active window
|
||||
bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
|
||||
@@ -233,7 +180,7 @@ bindd = SUPER CTRL, L, Lock system, exec, station-lock-screen
|
||||
# ==========================
|
||||
# Applications
|
||||
# ==========================
|
||||
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(station-cmd-terminal-cwd)"
|
||||
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec
|
||||
bindd = SUPER ALT, RETURN, Tmux, exec, uwsm-app -- xdg-terminal-exec --dir="$(station-cmd-terminal-cwd)" tmux new
|
||||
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
|
||||
bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(station-cmd-terminal-cwd)"
|
||||
@@ -245,7 +192,7 @@ bindd = SUPER SHIFT, N, Editor, exec, station-launch-editor
|
||||
bindd = SUPER SHIFT, G, Signal, exec, station-launch-or-focus ^signal$ "uwsm-app -- signal-desktop"
|
||||
bindd = SUPER SHIFT, O, Obsidian, exec, station-launch-or-focus ^obsidian$ "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
|
||||
# bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime
|
||||
bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- Enpass
|
||||
bindd = SUPER SHIFT, SLASH, Passwords, exec, Enpass showassistant
|
||||
bindd = SUPER SHIFT, E, Email, exec, station-launch-or-focus mailspring
|
||||
|
||||
# If your web app url contains #, type it as ## to prevent hyprland treating it as a comment
|
||||
|
||||
@@ -21,7 +21,7 @@ xwayland {
|
||||
}
|
||||
|
||||
# Use XCompose file
|
||||
env = XCOMPOSEFILE,~/.share/local/XCompose
|
||||
env = XCOMPOSEFILE,~/.config/xcompose
|
||||
|
||||
# Don't show update on first launch
|
||||
ecosystem {
|
||||
|
||||
28
.config/hypr/hypridle.conf
Normal file
28
.config/hypr/hypridle.conf
Normal file
@@ -0,0 +1,28 @@
|
||||
general {
|
||||
lock_cmd = station-lock-screen # lock screen
|
||||
before_sleep_cmd = loginctl lock-session # lock before suspend.
|
||||
after_sleep_cmd = sleep 1 && hyprctl dispatch dpms on # delay for PAM readiness, then turn on display.
|
||||
inhibit_sleep = 3 # wait until screen is locked
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 300 # 5min
|
||||
on-timeout = pidof hyprlock || station-launch-screensaver # start screensaver (if we haven't locked already)
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 301 # 5min
|
||||
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 330 # 5.5min
|
||||
on-timeout = brightnessctl -sd '*::kbd_backlight' set 0 # save state and turn off keyboard backlight
|
||||
on-resume = brightnessctl -rd '*::kbd_backlight' # restore keyboard backlight
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 330 # 5.5min
|
||||
on-timeout = station-system-suspend # suspend when timeout has passed
|
||||
on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected
|
||||
}
|
||||
@@ -7,4 +7,4 @@ source = ~/.config/hypr/windows.conf
|
||||
source = ~/.config/hypr/monitors.conf
|
||||
source = ~/.config/hypr/looknfeel.conf
|
||||
source = ~/.config/hypr/autostart.conf
|
||||
# source = ~/.config/hypr/theme.conf
|
||||
source = ~/.config/hypr/workspaces.conf
|
||||
|
||||
43
.config/hypr/hyprlock.conf
Normal file
43
.config/hypr/hyprlock.conf
Normal file
@@ -0,0 +1,43 @@
|
||||
source = ~/.cache/wal/colors-hyprland.conf
|
||||
|
||||
general {
|
||||
ignore_empty_input = true
|
||||
}
|
||||
|
||||
background {
|
||||
monitor =
|
||||
color = $background
|
||||
path = $wallpaper
|
||||
blur_passes = 3
|
||||
}
|
||||
|
||||
animations {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
input-field {
|
||||
monitor =
|
||||
size = 650, 100
|
||||
position = 0, 0
|
||||
halign = center
|
||||
valign = center
|
||||
|
||||
inner_color = $background
|
||||
outer_color = $color14
|
||||
outline_thickness = 4
|
||||
|
||||
font_family = JetBrainsMono Nerd Font
|
||||
font_color = $foreground
|
||||
|
||||
placeholder_text = Enter Password
|
||||
check_color = $color4
|
||||
fail_text = <i>$FAIL ($ATTEMPTS)</i>
|
||||
|
||||
rounding = 0
|
||||
shadow_passes = 0
|
||||
fade_on_empty = false
|
||||
}
|
||||
|
||||
auth {
|
||||
fingerprint:enabled = false
|
||||
}
|
||||
14
.config/hypr/hyprsunset.conf
Normal file
14
.config/hypr/hyprsunset.conf
Normal file
@@ -0,0 +1,14 @@
|
||||
# Makes hyprsunset do nothing to the screen by default
|
||||
# Without this, the default applies some tint to the monitor
|
||||
profile {
|
||||
time = 07:00
|
||||
identity = true
|
||||
}
|
||||
|
||||
# To enable auto switch to nightlight, set in your .config/hypr/autostart:
|
||||
# exec-once = uwsm app -- hyprsunset
|
||||
# and use the following:
|
||||
# profile {
|
||||
# time = 20:00
|
||||
# temperature = 4000
|
||||
# }
|
||||
@@ -1,6 +1,11 @@
|
||||
# Variables
|
||||
$activeBorderColor = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||
$inactiveBorderColor = rgba(595959aa)
|
||||
# $activeBorderColor = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||
# $inactiveBorderColor = rgba(595959aa)
|
||||
|
||||
source = ~/.cache/wal/colors-hyprland.conf
|
||||
|
||||
$activeBorderColor = $color14
|
||||
$inactiveBorderColor = $background
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#general
|
||||
general {
|
||||
@@ -129,6 +134,7 @@ misc {
|
||||
focus_on_activate = true
|
||||
anr_missed_pings = 3
|
||||
on_focus_under_fullscreen = 1
|
||||
disable_watchdog_warning = true
|
||||
}
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#cursor
|
||||
|
||||
@@ -3,11 +3,9 @@
|
||||
# Format: monitor = [port], resolution, position, scale
|
||||
|
||||
# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
|
||||
env = GDK_SCALE,2
|
||||
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
|
||||
env = QT_ENABLE_HIGHDPI_SCALING,1
|
||||
env = QT_SCREEN_SCALE_FACTORS,2
|
||||
monitor=eDP-1,3840x2160,0x0,2
|
||||
# monitor=eDP-1,3840x2160,0x0,2
|
||||
monitor=desc:Samsung Electric Company LU28R55 HNMN500475,3840x2160,auto-left,1.5
|
||||
monitor=desc:Samsung Electric Company LU28R55 HNMN500462,3840x2160,auto-right,1.5
|
||||
# monitor=HDMI-A-1,preferred,auto,auto
|
||||
|
||||
# Good compromise for 27" or 32" 4K monitors (but fractional!)
|
||||
|
||||
33
.config/hypr/workspaces.conf
Normal file
33
.config/hypr/workspaces.conf
Normal file
@@ -0,0 +1,33 @@
|
||||
workspace = 1, monitor:DP-1
|
||||
workspace = 2, monitor:DP-2
|
||||
workspace = 3, monitor:DP-1
|
||||
workspace = 4, monitor:DP-2
|
||||
workspace = 5, monitor:DP-1
|
||||
workspace = 6, monitor:DP-2
|
||||
workspace = 7, monitor:DP-1
|
||||
workspace = 8, monitor:DP-2
|
||||
workspace = 9, monitor:DP-1
|
||||
workspace = 10, monitor:DP-2
|
||||
|
||||
bindd = SUPER, code:10, Switch to Home, workspace, 2
|
||||
bindd = SUPER, code:10, Switch to Home, workspace, 1
|
||||
bindd = SUPER, code:11, Switch to Dev, workspace, 4
|
||||
bindd = SUPER, code:11, Switch to Dev, workspace, 3
|
||||
bindd = SUPER, code:12, Switch to Art, workspace, 6
|
||||
bindd = SUPER, code:12, Switch to Art, workspace, 5
|
||||
bindd = SUPER, code:13, Switch to Gaming, workspace, 8
|
||||
bindd = SUPER, code:13, Switch to Gaming, workspace, 7
|
||||
bindd = SUPER, code:14, Switch to Writing, workspace, 10
|
||||
bindd = SUPER, code:14, Switch to Writing, workspace, 9
|
||||
|
||||
# Move active window to a workspace with SUPER + SHIFT + [1-9; 0]
|
||||
bindd = SUPER SHIFT, code:10, Move window to workspace 1, exec, station-move-to-workspace 1
|
||||
bindd = SUPER SHIFT, code:11, Move window to workspace 1, exec, station-move-to-workspace 2
|
||||
bindd = SUPER SHIFT, code:12, Move window to workspace 1, exec, station-move-to-workspace 3
|
||||
bindd = SUPER SHIFT, code:13, Move window to workspace 1, exec, station-move-to-workspace 4
|
||||
bindd = SUPER SHIFT, code:14, Move window to workspace 1, exec, station-move-to-workspace 5
|
||||
|
||||
bindd = SUPER SHIFT, L, Move window to right monitor, movewindow, r
|
||||
bindd = SUPER SHIFT, H, Move window to left monitor, movewindow, l
|
||||
bindd = SUPER SHIFT, J, Move window to right monitor, movewindow, d
|
||||
bindd = SUPER SHIFT, K, Move window to left monitor, movewindow, u
|
||||
71
.config/hyprland-preview-share-picker/config.yaml
Normal file
71
.config/hyprland-preview-share-picker/config.yaml
Normal file
@@ -0,0 +1,71 @@
|
||||
# paths to stylesheets on the filesystem which should be applied to the application
|
||||
#
|
||||
# relative paths are resolved relative to the location of the config file
|
||||
stylesheets: ["../../.local/state/station/theme/hyprland-preview-share-picker.css"]
|
||||
# default page selected when the picker is opened
|
||||
default_page: windows
|
||||
|
||||
window:
|
||||
# height of the application window
|
||||
height: 500
|
||||
# width of the application window
|
||||
width: 1000
|
||||
|
||||
image:
|
||||
# size to which the images should be internally resized to reduce the memory footprint
|
||||
resize_size: 500
|
||||
# target size of the longer side of the image widget
|
||||
widget_size: 150
|
||||
|
||||
classes:
|
||||
# css classname of the window
|
||||
window: window
|
||||
# css classname of the card containing an image and a label
|
||||
image_card: card
|
||||
# css classname of the card containing an image and a label when the image is still being loaded
|
||||
image_card_loading: card-loading
|
||||
# css classname of the image inside the card
|
||||
image: image
|
||||
# css classname of the label inside the card
|
||||
image_label: image-label
|
||||
# css classname of the notebook containing all pages
|
||||
notebook: notebook
|
||||
# css classname of a label of the notebook
|
||||
tab_label: tab-label
|
||||
# css classname of a notebook page (e.g. windows container)
|
||||
notebook_page: page
|
||||
# css classname of the region selection button
|
||||
region_button: region-button
|
||||
# css classname of the button containing the session restore checkbox and label
|
||||
restore_button: restore-button
|
||||
|
||||
windows:
|
||||
# minimum amount of image cards per row on the windows page
|
||||
min_per_row: 3
|
||||
# maximum amount of image cards per row on the windows page
|
||||
max_per_row: 999
|
||||
# number of clicks needed to select a window
|
||||
clicks: 1
|
||||
# spacing in pixels between the window cards
|
||||
spacing: 12
|
||||
|
||||
outputs:
|
||||
# number of clicks needed to select an output
|
||||
clicks: 1
|
||||
# spacing in pixels between the outputs in the layout
|
||||
# note: the spacing is applied from both sides (the gap is `spacing * 2`)
|
||||
spacing: 6
|
||||
# show the label with the output name
|
||||
show_label: false
|
||||
# size the output cards respectively to their scaling
|
||||
respect_output_scaling: true
|
||||
|
||||
region:
|
||||
# command to run for region selection
|
||||
# the output needs to be in the <output>@<x>,<y>,<w>,<h> (e.g. DP-3@2789,436,756,576) format
|
||||
command: slurp -f '%o@%x,%y,%w,%h'
|
||||
|
||||
# hide the token restore checkbox and use the default value instead
|
||||
hide_token_restore: true
|
||||
# enable debug logs by default
|
||||
debug: false
|
||||
13
.config/imv/config
Normal file
13
.config/imv/config
Normal file
@@ -0,0 +1,13 @@
|
||||
[binds]
|
||||
|
||||
# Print the current image file
|
||||
<Ctrl+p> = exec lp "$imv_current_file"
|
||||
|
||||
# Delete the current image and quit the viewer
|
||||
<Ctrl+x> = exec rm "$imv_current_file"; quit
|
||||
|
||||
# Delete the current image and move to the next one
|
||||
<Ctrl+Shift+X> = exec rm "$imv_current_file"; close
|
||||
|
||||
# Rotate the currently open image by 90 degrees
|
||||
<Ctrl+r> = exec mogrify -rotate 90 "$imv_current_file"
|
||||
30
.config/mako/config
Normal file
30
.config/mako/config
Normal file
@@ -0,0 +1,30 @@
|
||||
include=~/.cache/wal/colors-mako
|
||||
|
||||
anchor=top-right
|
||||
default-timeout=5000
|
||||
width=420
|
||||
outer-margin=20
|
||||
padding=10,15
|
||||
border-size=2
|
||||
max-icon-size=32
|
||||
font=sans-serif 14px
|
||||
|
||||
[app-name=Spotify]
|
||||
invisible=1
|
||||
|
||||
[mode=do-not-disturb]
|
||||
invisible=true
|
||||
|
||||
[mode=do-not-disturb app-name=notify-send]
|
||||
invisible=false
|
||||
|
||||
[urgency=critical]
|
||||
default-timeout=0
|
||||
layer=overlay
|
||||
|
||||
[summary~="Setup Wi-Fi"]
|
||||
on-button-left=exec sh -c 'station-notification-dismiss "Setup Wi-Fi"; station-launch-wifi'
|
||||
|
||||
[summary~="Screenshot copied & saved"]
|
||||
max-icon-size=80
|
||||
format=<b>%s</b>\n%b
|
||||
1
.config/nix/nix.conf
Normal file
1
.config/nix/nix.conf
Normal file
@@ -0,0 +1 @@
|
||||
extra-experimental-features = flakes nix-command
|
||||
Submodule .config/nvim updated: 6f74961fc6...bd2349c1ba
99
.config/sddm/station/Main.qml
Normal file
99
.config/sddm/station/Main.qml
Normal file
@@ -0,0 +1,99 @@
|
||||
import QtQuick 2.0
|
||||
import SddmComponents 2.0
|
||||
|
||||
Rectangle {
|
||||
id: root
|
||||
width: 640
|
||||
height: 480
|
||||
color: "#000000"
|
||||
|
||||
property string currentUser: userModel.lastUser
|
||||
property int sessionIndex: {
|
||||
for (var i = 0; i < sessionModel.rowCount(); i++) {
|
||||
var name = (sessionModel.data(sessionModel.index(i, 0), Qt.DisplayRole) || "").toString()
|
||||
if (name.indexOf("uwsm") !== -1)
|
||||
return i
|
||||
}
|
||||
return sessionModel.lastIndex
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: sddm
|
||||
function onLoginFailed() {
|
||||
errorMessage.text = "Login failed"
|
||||
password.text = ""
|
||||
password.focus = true
|
||||
}
|
||||
function onLoginSucceeded() {
|
||||
errorMessage.text = ""
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
spacing: root.height * 0.04
|
||||
width: parent.width
|
||||
|
||||
// Image {
|
||||
// source: "logo.svg"
|
||||
// width: root.width * 0.35
|
||||
// height: Math.round(width * sourceSize.height / sourceSize.width)
|
||||
// fillMode: Image.PreserveAspectFit
|
||||
// anchors.horizontalCenter: parent.horizontalCenter
|
||||
// }
|
||||
|
||||
Row {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
spacing: root.width * 0.007
|
||||
|
||||
Text {
|
||||
text: "\uf023"
|
||||
color: "#ffffff"
|
||||
font.family: "JetBrainsMono Nerd Font"
|
||||
font.pixelSize: root.height * 0.025
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: root.width * 0.17
|
||||
height: root.height * 0.04
|
||||
color: "#000000"
|
||||
border.color: "#ffffff"
|
||||
border.width: 1
|
||||
clip: true
|
||||
|
||||
TextInput {
|
||||
id: password
|
||||
anchors.fill: parent
|
||||
anchors.margins: root.height * 0.008
|
||||
verticalAlignment: TextInput.AlignVCenter
|
||||
echoMode: TextInput.Password
|
||||
font.family: "JetBrainsMono Nerd Font"
|
||||
font.pixelSize: root.height * 0.02
|
||||
font.letterSpacing: root.height * 0.004
|
||||
passwordCharacter: "\u2022"
|
||||
color: "#ffffff"
|
||||
focus: true
|
||||
|
||||
Keys.onPressed: {
|
||||
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
|
||||
sddm.login(root.currentUser, password.text, root.sessionIndex)
|
||||
event.accepted = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: errorMessage
|
||||
text: ""
|
||||
color: "#f7768e"
|
||||
font.family: "JetBrainsMono Nerd Font"
|
||||
font.pixelSize: root.height * 0.018
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: password.forceActiveFocus()
|
||||
}
|
||||
6
.config/sddm/station/metadata.desktop
Normal file
6
.config/sddm/station/metadata.desktop
Normal file
@@ -0,0 +1,6 @@
|
||||
[SddmGreeterTheme]
|
||||
Name=Station
|
||||
Description=Minimal terminal-style login theme matching the Limine bootloader aesthetic
|
||||
Author=Station
|
||||
Type=sddm-theme
|
||||
Version=1.0
|
||||
1
.config/sddm/station/theme.conf
Normal file
1
.config/sddm/station/theme.conf
Normal file
@@ -0,0 +1 @@
|
||||
[General]
|
||||
@@ -1,35 +0,0 @@
|
||||
OPENROUTER_API_KEY=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
|
||||
OPENROUTER_API_BASE=https://openrouter.ai/api
|
||||
|
||||
AIHUBMIX_API_KEY=sk-0ArIwI5NaUF1U1Z6F9D9CeF8C155436bA7E8A8107cFf7f7b
|
||||
AIHUBMIX_API_BASE=https://aihubmix.com/api
|
||||
|
||||
#COPILOT_API_KEY=ghu_XOB0IcwvOBthQxxZea0EBhZHjn0aBW17UHml
|
||||
#COPILOT_API_BASE=https://api.githubcopilot.com
|
||||
COPILOT_API_KEY=
|
||||
COPILOT_API_BASE=
|
||||
|
||||
DEFAULT_OPENAI_API_KEY=${OPENROUTER_API_KEY}
|
||||
DEFAULT_OPENAI_API_BASE=${OPENROUTER_API_BASE}
|
||||
# DEFAULT_AI_MODEL=openai/gpt-5.2-codex
|
||||
DEFAULT_AI_MODEL=auto
|
||||
|
||||
REASONING_OPENAI_API_KEY=${OPENROUTER_API_KEY}
|
||||
REASONING_OPENAI_API_BASE=${OPENROUTER_API_BASE}
|
||||
#REASONING_MODEL=openai/gpt-5.1-codex
|
||||
# REASONING_MODEL=moonshotai/kimi-k2-thinking
|
||||
REASONING_MODEL=anthropic/claude-opus-4.6
|
||||
|
||||
FAST_OPENAI_API_KEY=${OPENROUTER_API_KEY}
|
||||
FAST_OPENAI_API_BASE=${OPENROUTER_API_BASE}
|
||||
FAST_MODEL=qwen/qwen3-max
|
||||
|
||||
COMPLETION_OPENAI_API_KEY=${OPENROUTER_API_KEY}
|
||||
COMPLETION_OPENAI_API_BASE=${OPENROUTER_API_BASE}
|
||||
COMPLETION_MODEL=google/gemini-3-flash-preview
|
||||
# COMPLETION_MODEL=anthropic/claude-3-haiku
|
||||
|
||||
OPENAI_API_KEY=${DEFAULT_OPENAI_API_KEY}
|
||||
OPENAI_API_BASE=${DEFAULT_OPENAI_API_BASE}
|
||||
AIDER_OPENAI_API_KEY=${DEFAULT_OPENAI_API_KEY}
|
||||
AIDER_OPENAI_API_BASE=${DEFAULT_OPENAI_API_BASE}
|
||||
@@ -1,6 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
|
||||
# Use neovim for vim if present
|
||||
[ -x "$(command -v nvim)" ] && alias vim="nvim" vimdiff="nvim -d"
|
||||
|
||||
@@ -14,6 +13,13 @@ done
|
||||
|
||||
# Verbosity and settings that you pretty much just always are going to want.
|
||||
alias \
|
||||
...="cd .." \
|
||||
...="cd ../.." \
|
||||
....="cd ../../.." \
|
||||
.....="cd ../../../.." \
|
||||
df="df -h" \
|
||||
du="du -h" \
|
||||
free="free -m" \
|
||||
cp="cp -iv" \
|
||||
mv="mv -iv" \
|
||||
rm="rm -vI" \
|
||||
@@ -25,45 +31,41 @@ alias \
|
||||
tmux="tmux -f ~/.config/tmux/tmux.conf" \
|
||||
aider="aider --config ~/.config/aider/aider.yaml"
|
||||
|
||||
alias ff="fzf --preview 'bat --style=numbers --color=always {}'"
|
||||
alias eff='$EDITOR "$(ff)"'
|
||||
|
||||
if command -v eza &> /dev/null; then
|
||||
alias ls='eza -lh --group-directories-first --icons=auto'
|
||||
alias la='ls -al'
|
||||
alias lt='eza --tree --level=2 --long --icons --git'
|
||||
alias lta='lt -a'
|
||||
fi
|
||||
|
||||
if command -v zoxide &> /dev/null; then
|
||||
alias cd="zd"
|
||||
zd() {
|
||||
if (( $# == 0 )); then
|
||||
builtin cd ~ || return
|
||||
elif [[ -d $1 ]]; then
|
||||
builtin cd "$1" || return
|
||||
else
|
||||
if ! z "$@"; then
|
||||
echo "Error: Directory not found"
|
||||
return 1
|
||||
fi
|
||||
|
||||
printf "\U000F17A9 "
|
||||
pwd
|
||||
fi
|
||||
|
||||
if [[ -n $TMUX ]]; then
|
||||
tmux rename-window "$(basename "$PWD")"
|
||||
fi
|
||||
}
|
||||
fi
|
||||
|
||||
# Colorize commands when possible.
|
||||
alias \
|
||||
ls="ls -hAN --color=auto --group-directories-first"\
|
||||
li="ls -AhgGFt --group-directories-first --time=atime --color=auto --time-style=long-iso \
|
||||
| sed 's/^[^ ][^ ]* *[^ ][^ ]* //' \
|
||||
| awk '\
|
||||
/^total/ { next }\
|
||||
{\
|
||||
filename = \$NF;\
|
||||
icon = \"📄\";\
|
||||
if (filename ~ /\/$/) {\
|
||||
icon = \"📁\";\
|
||||
} else if (filename ~ /\*$/) {\
|
||||
icon = \"⚙️ \";\
|
||||
} else if (filename ~ /@$/) {\
|
||||
icon = \"🔗\";\
|
||||
} else {\
|
||||
ext = tolower(cleanName);\
|
||||
if (ext ~ /\./) {\
|
||||
sub(/^.*\./, \"\", ext);\
|
||||
} else {\
|
||||
ext = \"\";\
|
||||
}\
|
||||
if (ext ~ /^(jpg|jpeg|png|gif)$/) {\
|
||||
icon = \"🖼\";\
|
||||
} else if (ext ~ /^(mp3|wav|flac)$/) {\
|
||||
icon = \"🎵\";\
|
||||
} else if (ext ~ /^(pdf)$/) {\
|
||||
icon = \"📕\";\
|
||||
} else if (ext ~ /^(txt|md)$/) {\
|
||||
icon = \"📝\";\
|
||||
} else if (ext ~ /^(js|py|sh|c|cpp|java)$/) {\
|
||||
icon = \"⚡\";\
|
||||
}\
|
||||
}\
|
||||
print icon \" \" \$0;\
|
||||
}\
|
||||
'" \
|
||||
grep="grep --color=auto" \
|
||||
diff="diff --color=auto" \
|
||||
ccat="highlight --out-format=ansi"
|
||||
@@ -73,11 +75,9 @@ alias \
|
||||
ka="killall" \
|
||||
YT="youtube-viewer" \
|
||||
sdn="sudo shutdown -h now" \
|
||||
e="$EDITOR" \
|
||||
v="$EDITOR" \
|
||||
cl="clear" \
|
||||
p="sudo pacman" \
|
||||
z="zathura" \
|
||||
ll="ls -AhlFt --group-directories-first --time=atime --color=auto --time-style=long-iso" \
|
||||
ag="alias | grep" \
|
||||
lc="clone_from_labs" \
|
||||
@@ -89,10 +89,6 @@ alias \
|
||||
notes="cd ~/Tower/Notes && nvim ." \
|
||||
aid="aider"
|
||||
|
||||
# Projects
|
||||
alias \
|
||||
src="tmuxinator start runcats"
|
||||
|
||||
# Dev
|
||||
alias \
|
||||
sail='[ -f sail ] && sh sail || sh vendor/bin/sail' \
|
||||
@@ -112,15 +108,19 @@ alias \
|
||||
enr="trans en:ro -j -- " \
|
||||
enri="trans en:ro -i"
|
||||
|
||||
alias d='docker'
|
||||
alias dc='docker compose'
|
||||
alias t='tmux attach || tmux new -s Work'
|
||||
e() { if [ "$#" -eq 0 ]; then command nvim . ; else command nvim "$@"; fi; }
|
||||
|
||||
open() (
|
||||
xdg-open "$@" >/dev/null 2>&1 &
|
||||
)
|
||||
|
||||
function tf() {
|
||||
php artisan test --filter="$*"
|
||||
}
|
||||
|
||||
function cdj() {
|
||||
dir=$1
|
||||
cd $1 2>/dev/null || autojump $1
|
||||
}
|
||||
|
||||
function dut() {
|
||||
threshold=${1:-5}
|
||||
sudo du -hax -t"${threshold}G" /* --exclude=/{proc,sys,dev,run}
|
||||
@@ -246,7 +246,6 @@ alias \
|
||||
|
||||
|
||||
alias \
|
||||
docker-compose="podman-compose" \
|
||||
cat="bat" \
|
||||
ls="eza --icons=always" \
|
||||
fullClean="nix-collect-garbage --delete-old; sudo nix-collect-garbage -d; sudo /run/current-system/bin/switch-to-configuration boot" \
|
||||
|
||||
305
.config/shell/fns
Executable file
305
.config/shell/fns
Executable file
@@ -0,0 +1,305 @@
|
||||
# Compression
|
||||
compress() { tar -czf "${1%/}.tar.gz" "${1%/}"; }
|
||||
alias decompress="tar -xzf"
|
||||
|
||||
# Write iso file to sd card
|
||||
iso2sd() {
|
||||
if (( $# < 1 )); then
|
||||
echo "Usage: iso2sd <input_file> [output_device]"
|
||||
echo "Example: iso2sd ~/Downloads/ubuntu-25.04-desktop-amd64.iso /dev/sda"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local iso="$1"
|
||||
local drive="$2"
|
||||
|
||||
if [[ -z $drive ]]; then
|
||||
local available_sds=$(lsblk -dpno NAME | grep -E '/dev/sd')
|
||||
|
||||
if [[ -z $available_sds ]]; then
|
||||
echo "No SD drives found and no drive specified"
|
||||
return 1
|
||||
fi
|
||||
|
||||
drive=$(omarchy-drive-select "$available_sds")
|
||||
|
||||
if [[ -z $drive ]]; then
|
||||
echo "No drive selected"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
sudo dd bs=4M status=progress oflag=sync if="$iso" of="$drive"
|
||||
sudo eject "$drive"
|
||||
}
|
||||
|
||||
# Format an entire drive for a single partition using exFAT
|
||||
format-drive() {
|
||||
if (( $# != 2 )); then
|
||||
echo "Usage: format-drive <device> <name>"
|
||||
echo "Example: format-drive /dev/sda 'My Stuff'"
|
||||
echo -e "\nAvailable drives:"
|
||||
lsblk -d -o NAME -n | awk '{print "/dev/"$1}'
|
||||
else
|
||||
echo "WARNING: This will completely erase all data on $1 and label it '$2'."
|
||||
read -rp "Are you sure you want to continue? (y/N): " confirm
|
||||
|
||||
if [[ $confirm =~ ^[Yy]$ ]]; then
|
||||
sudo wipefs -a "$1"
|
||||
sudo dd if=/dev/zero of="$1" bs=1M count=100 status=progress
|
||||
sudo parted -s "$1" mklabel gpt
|
||||
sudo parted -s "$1" mkpart primary 1MiB 100%
|
||||
sudo parted -s "$1" set 1 msftdata on
|
||||
|
||||
partition="$([[ $1 == *"nvme"* ]] && echo "${1}p1" || echo "${1}1")"
|
||||
sudo partprobe "$1" || true
|
||||
sudo udevadm settle || true
|
||||
|
||||
sudo mkfs.exfat -n "$2" "$partition"
|
||||
|
||||
echo "Drive $1 formatted as exFAT and labeled '$2'."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# SSH Port Forwarding Functions
|
||||
fip() {
|
||||
(( $# < 2 )) && echo "Usage: fip <host> <port1> [port2] ..." && return 1
|
||||
local host="$1"
|
||||
shift
|
||||
for port in "$@"; do
|
||||
ssh -f -N -L "$port:localhost:$port" "$host" && echo "Forwarding localhost:$port -> $host:$port"
|
||||
done
|
||||
}
|
||||
|
||||
dip() {
|
||||
(( $# == 0 )) && echo "Usage: dip <port1> [port2] ..." && return 1
|
||||
for port in "$@"; do
|
||||
pkill -f "ssh.*-L $port:localhost:$port" && echo "Stopped forwarding port $port" || echo "No forwarding on port $port"
|
||||
done
|
||||
}
|
||||
|
||||
lip() {
|
||||
pgrep -af "ssh.*-L [0-9]+:localhost:[0-9]+" || echo "No active forwards"
|
||||
}
|
||||
|
||||
# Create a Tmux Dev Layout with editor, ai, and terminal
|
||||
# Usage: tdl <c|cx|codex|other_ai> [<second_ai>]
|
||||
tdl() {
|
||||
[[ -z $1 ]] && { echo "Usage: tdl <c|cx|codex|other_ai> [<second_ai>]"; return 1; }
|
||||
[[ -z $TMUX ]] && { echo "You must start tmux to use tdl."; return 1; }
|
||||
|
||||
local current_dir="${PWD}"
|
||||
local editor_pane ai_pane ai2_pane
|
||||
local ai="$1"
|
||||
local ai2="$2"
|
||||
|
||||
# Use TMUX_PANE for the pane we're running in (stable even if active window changes)
|
||||
editor_pane="$TMUX_PANE"
|
||||
|
||||
# Name the current window after the base directory name
|
||||
tmux rename-window -t "$editor_pane" "$(basename "$current_dir")"
|
||||
|
||||
# Split window vertically - top 85%, bottom 15% (target editor pane explicitly)
|
||||
tmux split-window -v -p 15 -t "$editor_pane" -c "$current_dir"
|
||||
|
||||
# Split editor pane horizontally - AI on right 30% (capture new pane ID directly)
|
||||
ai_pane=$(tmux split-window -h -p 30 -t "$editor_pane" -c "$current_dir" -P -F '#{pane_id}')
|
||||
|
||||
# If second AI provided, split the AI pane vertically
|
||||
if [[ -n $ai2 ]]; then
|
||||
ai2_pane=$(tmux split-window -v -t "$ai_pane" -c "$current_dir" -P -F '#{pane_id}')
|
||||
tmux send-keys -t "$ai2_pane" "$ai2" C-m
|
||||
fi
|
||||
|
||||
# Run ai in the right pane
|
||||
tmux send-keys -t "$ai_pane" "$ai" C-m
|
||||
|
||||
# Run nvim in the left pane
|
||||
tmux send-keys -t "$editor_pane" "$EDITOR ." C-m
|
||||
|
||||
# Select the nvim pane for focus
|
||||
tmux select-pane -t "$editor_pane"
|
||||
}
|
||||
|
||||
# Create multiple tdl windows with one per subdirectory in the current directory
|
||||
# Usage: tdlm <c|cx|codex|other_ai> [<second_ai>]
|
||||
tdlm() {
|
||||
[[ -z $1 ]] && { echo "Usage: tdlm <c|cx|codex|other_ai> [<second_ai>]"; return 1; }
|
||||
[[ -z $TMUX ]] && { echo "You must start tmux to use tdlm."; return 1; }
|
||||
|
||||
local ai="$1"
|
||||
local ai2="$2"
|
||||
local base_dir="$PWD"
|
||||
local first=true
|
||||
|
||||
# Rename the session to the current directory name (replace dots/colons which tmux disallows)
|
||||
tmux rename-session "$(basename "$base_dir" | tr '.:' '--')"
|
||||
|
||||
for dir in "$base_dir"/*/; do
|
||||
[[ -d $dir ]] || continue
|
||||
local dirpath="${dir%/}"
|
||||
|
||||
if $first; then
|
||||
# Reuse the current window for the first project
|
||||
tmux send-keys -t "$TMUX_PANE" "cd '$dirpath' && tdl $ai $ai2" C-m
|
||||
first=false
|
||||
else
|
||||
local pane_id=$(tmux new-window -c "$dirpath" -P -F '#{pane_id}')
|
||||
tmux send-keys -t "$pane_id" "tdl $ai $ai2" C-m
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Create a multi-pane swarm layout with the same command started in each pane (great for AI)
|
||||
# Usage: tsl <pane_count> <command>
|
||||
tsl() {
|
||||
[[ -z $1 || -z $2 ]] && { echo "Usage: tsl <pane_count> <command>"; return 1; }
|
||||
[[ -z $TMUX ]] && { echo "You must start tmux to use tsl."; return 1; }
|
||||
|
||||
local count="$1"
|
||||
local cmd="$2"
|
||||
local current_dir="${PWD}"
|
||||
local -a panes
|
||||
|
||||
tmux rename-window -t "$TMUX_PANE" "$(basename "$current_dir")"
|
||||
|
||||
panes+=("$TMUX_PANE")
|
||||
|
||||
while (( ${#panes[@]} < count )); do
|
||||
local new_pane
|
||||
local split_target="${panes[-1]}"
|
||||
new_pane=$(tmux split-window -h -t "$split_target" -c "$current_dir" -P -F '#{pane_id}')
|
||||
panes+=("$new_pane")
|
||||
tmux select-layout -t "${panes[0]}" tiled
|
||||
done
|
||||
|
||||
for pane in "${panes[@]}"; do
|
||||
tmux send-keys -t "$pane" "$cmd" C-m
|
||||
done
|
||||
|
||||
tmux select-pane -t "${panes[0]}"
|
||||
}
|
||||
|
||||
# Transcode a video to a good-balance 1080p that's great for sharing online
|
||||
transcode-video-1080p() {
|
||||
ffmpeg -i "$1" -vf scale=1920:1080 -c:v libx264 -preset fast -crf 23 -c:a copy "${1%.*}-1080p.mp4"
|
||||
}
|
||||
|
||||
# Transcode a video to a good-balance 4K that's great for sharing online
|
||||
transcode-video-4K() {
|
||||
ffmpeg -i "$1" -c:v libx265 -preset slow -crf 24 -c:a aac -b:a 192k "${1%.*}-optimized.mp4"
|
||||
}
|
||||
|
||||
# Transcode any image to JPG image that's great for shrinking wallpapers
|
||||
img2jpg() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -quality 95 -strip "${img%.*}-converted.jpg"
|
||||
}
|
||||
|
||||
# Transcode any image to a small JPG (max 1080px wide) that's great for sharing online
|
||||
img2jpg-small() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -resize 1080x\> -quality 95 -strip "${img%.*}-small.jpg"
|
||||
}
|
||||
|
||||
# Transcode any image to a medium JPG (max 1800px wide) that's great for sharing online
|
||||
img2jpg-medium() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -resize 1800x\> -quality 95 -strip "${img%.*}-medium.jpg"
|
||||
}
|
||||
|
||||
# Transcode any image to compressed-but-lossless PNG
|
||||
img2png() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -strip -define png:compression-filter=5 \
|
||||
-define png:compression-level=9 \
|
||||
-define png:compression-strategy=1 \
|
||||
-define png:exclude-chunk=all \
|
||||
"${img%.*}-optimized.png"
|
||||
}
|
||||
|
||||
# Create a new worktree and branch from within current git directory.
|
||||
gwa() {
|
||||
if [[ -z "$1" ]]; then
|
||||
echo "Usage: ga [branch name]"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local branch="$1"
|
||||
local base="$(basename "$PWD")"
|
||||
local path="../${base}--${branch}"
|
||||
|
||||
git worktree add -b "$branch" "$path"
|
||||
mise trust "$path"
|
||||
cd "$path"
|
||||
}
|
||||
|
||||
# Remove worktree and branch from within active worktree directory.
|
||||
gwd() {
|
||||
if gum confirm "Remove worktree and branch?"; then
|
||||
local cwd base branch root
|
||||
|
||||
cwd="$(pwd)"
|
||||
worktree="$(basename "$cwd")"
|
||||
|
||||
# split on first `--`
|
||||
root="${worktree%%--*}"
|
||||
branch="${worktree#*--}"
|
||||
|
||||
# Protect against accidentially nuking a non-worktree directory
|
||||
if [[ "$root" != "$worktree" ]]; then
|
||||
cd "../$root"
|
||||
git worktree remove "$worktree" --force
|
||||
git branch -D "$branch"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
linkenv() {
|
||||
local env="${1:-dev}"
|
||||
local env_files_directory="$HOME/Tower/.backups/Development/Environments"
|
||||
|
||||
# Fetch the closest git parent or current directory if not
|
||||
local root_dir=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
|
||||
local project_name=$(basename "$root_dir")
|
||||
|
||||
local source_file="$env_files_directory/${project_name}-${env}-env"
|
||||
local target_file="$root_dir/.env"
|
||||
|
||||
if [[ -f "$target_file" ]]; then
|
||||
if gum confirm "Overwrite existing .env file?"; then
|
||||
if [[ -L "$target_file" ]]; then
|
||||
rm "$target_file"
|
||||
else
|
||||
mv "$target_file" "${target_file}.bak"
|
||||
echo "Existing .env backed up to .env.bak"
|
||||
fi
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -f "$source_file" ]]; then
|
||||
ln -sf "$source_file" "$target_file"
|
||||
echo "Linked $source_file -> $target_file"
|
||||
else
|
||||
echo "No environment file found for $project_name at $source_file copying example, copying example if exists"
|
||||
|
||||
if [[ -f "$root_dir/.env.example" ]]; then
|
||||
cp "$root_dir/.env.example" "$source_file"
|
||||
ln -sf "$source_file" "$target_file"
|
||||
echo "Copied .env.example to $source_file and linked"
|
||||
else
|
||||
echo "No .env.example found."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
@@ -47,6 +47,7 @@ export ANDROID_AVD_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/android/avd"
|
||||
export ANDROID_USER_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/android"
|
||||
export CODEX_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/codex"
|
||||
export XCOMPOSEFILE="${XDG_CONFIG_HOME:-$HOME/.config}/xcompose"
|
||||
export GEMINI_CLI_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||
|
||||
# Export OPENAI_API_KEY from GitHub Copilot config
|
||||
# if [ -f "$HOME/.config/github-copilot/apps.json" ]; then
|
||||
@@ -70,14 +71,15 @@ export LESS_TERMCAP_us="$(printf '%b' '\e[1;32m')"
|
||||
export LESS_TERMCAP_ue="$(printf '%b' '\e[0m')"
|
||||
export LESS_OPEN="| /usr/bin/highlight -O ansi %s 2>/dev/null"
|
||||
export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme.
|
||||
export QT_AUTO_SCREEN_SCALE_FACTOR=1
|
||||
export QT_SCREEN_SCALE_FACTORS=2
|
||||
# export QT_AUTO_SCREEN_SCALE_FACTOR=1
|
||||
# export QT_SCREEN_SCALE_FACTORS=2
|
||||
export MOZ_USE_XINPUT2="1" # Mozilla smooth scrolling/touchpads.
|
||||
export _JAVA_AWT_WM_NONREPARENTING=1 # Fix for Java applications in dwm
|
||||
|
||||
# Development variables
|
||||
export ANDROID_SDK_ROOT="$HOME/Android/Sdk"
|
||||
export ANDROID_SDK_ROOT="$HOME/.local/share/android/Sdk"
|
||||
export ANDROID_HOME="$ANDROID_SDK_ROOT"
|
||||
export GRADLE_USER_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/gradle"
|
||||
|
||||
export PATH="$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/cmdline-tools/bin:$ANDROID_HOME/platform-tools:$ANDROID_AVD_HOME:$ANDROID_HOME/emulator:$XDG_DATA_HOME/cargo/bin"
|
||||
export PATH="$HOME/development/flutter/bin:$PATH"
|
||||
@@ -176,8 +178,6 @@ export NVM_DIR="$HOME/.config/nvm"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
|
||||
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
|
||||
|
||||
source "$HOME/.local/share/../bin/env"
|
||||
|
||||
env_file="$HOME/.config/shell/.env"
|
||||
if [ -f "$env_file" ]; then
|
||||
set -a
|
||||
|
||||
28
.config/swayosd/style.css
Normal file
28
.config/swayosd/style.css
Normal file
@@ -0,0 +1,28 @@
|
||||
@import "../../.cache/wal/colors-waybar.css";
|
||||
|
||||
window {
|
||||
border-radius: 0;
|
||||
opacity: 0.97;
|
||||
border: 2px solid @foreground;
|
||||
|
||||
background-color: @background;
|
||||
}
|
||||
|
||||
label {
|
||||
font-family: 'Fira Code Nerd Font';
|
||||
font-size: 11pt;
|
||||
|
||||
color: @foreground;
|
||||
}
|
||||
|
||||
image {
|
||||
color: @foreground;
|
||||
}
|
||||
|
||||
progressbar {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
progress {
|
||||
background-color: @foreground;
|
||||
}
|
||||
@@ -49,13 +49,13 @@ bind-key -T copy-mode-vi 'v' send -X begin-selection
|
||||
bind-key -T copy-mode-vi 'y' send -X copy-selection-and-cancel
|
||||
|
||||
# Status bar
|
||||
set -g status-left-length 52
|
||||
set -g status-right-length 451
|
||||
set -g status-style fg="white",bg="colour234"
|
||||
set -g window-status-activity-style bold
|
||||
set -g pane-border-style fg="colour245"
|
||||
set -g pane-active-border-style fg="colour39"
|
||||
set -g message-style bold,fg="colour16",bg="colour221"
|
||||
# set -g status-left-length 52
|
||||
# set -g status-right-length 451
|
||||
# set -g status-style fg="white",bg="colour234"
|
||||
# set -g window-status-activity-style bold
|
||||
# set -g pane-border-style fg="colour245"
|
||||
# set -g pane-active-border-style fg="colour39"
|
||||
# set -g message-style bold,fg="colour16",bg="colour221"
|
||||
# set -g status-left '#[fg=colour235,bg=colour252,bold] ❐ #S#[fg=colour252,bg=colour238,nobold]⮀#[fg=colour245,bg=colour238,bold] #(hostname)#[fg=colour238,bg=colour234,nobold]⮀'
|
||||
# set -g status-right "#[fg=colour39, bg=colour234]⮂#[fg=colour234,bg=colour39] 🐳 "
|
||||
# set -g window-status-format "#[fg=white,bg=colour234] #I #W "
|
||||
@@ -81,3 +81,84 @@ bind-key -n User0 send-keys C-S-o
|
||||
bind-key -n User0 send-keys C-S-y
|
||||
bind-key -n User0 send-keys C-S-a
|
||||
|
||||
# Prefix
|
||||
set -g prefix C-Space
|
||||
set -g prefix2 C-b
|
||||
bind C-Space send-prefix
|
||||
|
||||
# Reload config
|
||||
bind q source-file ~/.config/tmux/tmux.conf
|
||||
|
||||
# Pane Controls
|
||||
bind x kill-pane
|
||||
|
||||
bind -n C-M-Left select-pane -L
|
||||
bind -n C-M-Right select-pane -R
|
||||
bind -n C-M-Up select-pane -U
|
||||
bind -n C-M-Down select-pane -D
|
||||
|
||||
bind -n C-M-S-Left resize-pane -L 5
|
||||
bind -n C-M-S-Down resize-pane -D 5
|
||||
bind -n C-M-S-Up resize-pane -U 5
|
||||
bind -n C-M-S-Right resize-pane -R 5
|
||||
|
||||
# Window navigation
|
||||
bind r command-prompt -I "#W" "rename-window -- '%%'"
|
||||
bind c new-window -c "#{pane_current_path}"
|
||||
|
||||
bind -n M-1 select-window -t 1
|
||||
bind -n M-2 select-window -t 2
|
||||
bind -n M-3 select-window -t 3
|
||||
bind -n M-4 select-window -t 4
|
||||
bind -n M-5 select-window -t 5
|
||||
bind -n M-6 select-window -t 6
|
||||
bind -n M-7 select-window -t 7
|
||||
bind -n M-8 select-window -t 8
|
||||
bind -n M-9 select-window -t 9
|
||||
|
||||
bind -n M-Left select-window -t -1
|
||||
bind -n M-Right select-window -t +1
|
||||
bind -n M-S-Left swap-window -t -1 \; select-window -t -1
|
||||
bind -n M-S-Right swap-window -t +1 \; select-window -t +1
|
||||
|
||||
# Session controls
|
||||
bind R command-prompt -I "#S" "rename-session -- '%%'"
|
||||
bind C new-session -c "#{pane_current_path}"
|
||||
bind X kill-session
|
||||
bind P switch-client -p
|
||||
bind N switch-client -n
|
||||
|
||||
bind -n M-Up switch-client -p
|
||||
bind -n M-Down switch-client -n
|
||||
|
||||
# General
|
||||
set -g mouse on
|
||||
set -g base-index 1
|
||||
setw -g pane-base-index 1
|
||||
set -g renumber-windows on
|
||||
set -g history-limit 50000
|
||||
set -g focus-events on
|
||||
set -g set-clipboard on
|
||||
set -g allow-passthrough on
|
||||
setw -g aggressive-resize on
|
||||
set -g detach-on-destroy off
|
||||
|
||||
# Status bar
|
||||
set -g status-position top
|
||||
set -g status-interval 5
|
||||
set -g status-left-length 30
|
||||
set -g status-right-length 50
|
||||
set -g window-status-separator ""
|
||||
|
||||
# Theme
|
||||
set -g status-style "bg=default,fg=default"
|
||||
set -g status-left "#[fg=black,bg=blue,bold] #S #[bg=default] "
|
||||
set -g status-right "#[fg=blue]#{?client_prefix,PREFIX ,}#{?window_zoomed_flag,ZOOM ,}#[fg=brightblack]#h "
|
||||
set -g window-status-format "#[fg=brightblack] #I:#W "
|
||||
set -g window-status-current-format "#[fg=blue,bold] #I:#W "
|
||||
set -g pane-border-style "fg=brightblack"
|
||||
set -g pane-active-border-style "fg=blue"
|
||||
set -g message-style "bg=default,fg=blue"
|
||||
set -g message-command-style "bg=default,fg=blue"
|
||||
set -g mode-style "bg=blue,fg=black"
|
||||
setw -g clock-mode-colour blue
|
||||
|
||||
13
.config/uwsm/default
Normal file
13
.config/uwsm/default
Normal file
@@ -0,0 +1,13 @@
|
||||
# Changes require a restart to take effect.
|
||||
|
||||
# Install other terminals via Install > Terminal
|
||||
export TERMINAL=xdg-terminal-exec
|
||||
|
||||
# Use code for VSCode
|
||||
export EDITOR=nvim
|
||||
|
||||
# Use a custom directory for screenshots (remember to make the directory!)
|
||||
# export STATION_SCREENSHOT_DIR="$HOME/Pictures/Screenshots"
|
||||
|
||||
# Use a custom directory for screenrecordings (remember to make the directory!)
|
||||
# export STATION_SCREENRECORD_DIR="$HOME/Videos/Screencasts"
|
||||
16
.config/uwsm/env
Normal file
16
.config/uwsm/env
Normal file
@@ -0,0 +1,16 @@
|
||||
# Changes require a restart to take effect.
|
||||
|
||||
# Ensure Omarchy bins are in the path
|
||||
export STATION_PATH=$HOME/.local/share/station
|
||||
export PATH=$STATION_PATH/bin:$PATH
|
||||
|
||||
export GDK_SCALE=2
|
||||
# export QT_AUTO_SCALE_FACTOR=1
|
||||
# export QT_ENABLE_HIGHDPI_SCALING=1
|
||||
export QT_SCALE_FACTOR=1.5
|
||||
|
||||
# Set default terminal and editor
|
||||
source ~/.config/uwsm/default
|
||||
|
||||
# Activate mise if present on the system
|
||||
station-cmd-present mise && eval "$(mise activate bash --shims)"
|
||||
97
.config/voxtype/config.toml
Normal file
97
.config/voxtype/config.toml
Normal file
@@ -0,0 +1,97 @@
|
||||
# Voxtype Configuration
|
||||
#
|
||||
# Location: ~/.config/voxtype/config.toml
|
||||
# All settings can be overridden via CLI flags
|
||||
#
|
||||
# State file for external integrations (Waybar, polybar, etc.)
|
||||
# Use "auto" for default location ($XDG_RUNTIME_DIR/voxtype/state),
|
||||
# a custom path, or "disabled" to turn off. The daemon writes state
|
||||
# ("idle", "recording", "transcribing") to this file whenever it changes.
|
||||
# Required for `voxtype record toggle` and `voxtype status` commands.
|
||||
state_file = "auto"
|
||||
|
||||
[hotkey]
|
||||
# Hotkey is configured in Hyprland. Default is Super + Ctrl + X
|
||||
enabled = false
|
||||
|
||||
[audio]
|
||||
# Audio input device ("default" uses system default)
|
||||
# List devices with: pactl list sources short
|
||||
device = "default"
|
||||
|
||||
# Sample rate in Hz (whisper expects 16000)
|
||||
sample_rate = 16000
|
||||
|
||||
# Maximum recording duration in seconds (safety limit)
|
||||
max_duration_secs = 60
|
||||
|
||||
# [audio.feedback]
|
||||
# Enable audio feedback sounds (beeps when recording starts/stops)
|
||||
# enabled = true
|
||||
#
|
||||
# Sound theme: "default", "subtle", "mechanical", or path to custom theme directory
|
||||
# theme = "default"
|
||||
#
|
||||
# Volume level (0.0 to 1.0)
|
||||
# volume = 0.7
|
||||
|
||||
[whisper]
|
||||
# Model to use for transcription
|
||||
# Options: tiny, tiny.en, base, base.en, small, small.en, medium, medium.en, large-v3, large-v3-turbo
|
||||
# .en models are English-only but faster and more accurate for English
|
||||
# large-v3-turbo is faster than large-v3 with minimal accuracy loss (recommended for GPU)
|
||||
# Or provide absolute path to a custom .bin model file
|
||||
model = "base.en"
|
||||
|
||||
# Language for transcription
|
||||
# Use "en" for English, "auto" for auto-detection
|
||||
# See: https://github.com/openai/whisper#available-models-and-languages
|
||||
language = "en"
|
||||
|
||||
# Translate non-English speech to English
|
||||
translate = false
|
||||
|
||||
# Number of CPU threads for inference (omit for auto-detection)
|
||||
# threads = 4
|
||||
|
||||
[output]
|
||||
# Primary output mode: "type" or "clipboard"
|
||||
# - type: Simulates keyboard input at cursor position (requires ydotool)
|
||||
# - clipboard: Copies text to clipboard (requires wl-copy)
|
||||
mode = "type"
|
||||
|
||||
# Fall back to clipboard if typing fails
|
||||
fallback_to_clipboard = true
|
||||
|
||||
# Delay between typed characters in milliseconds
|
||||
# 0 = fastest possible, increase if characters are dropped
|
||||
type_delay_ms = 1
|
||||
|
||||
# Post-processing command (optional)
|
||||
# Pipe transcribed text through an external command for cleanup before output.
|
||||
# The command receives text on stdin and outputs processed text on stdout.
|
||||
# Useful for LLM-based text cleanup, grammar correction, filler word removal.
|
||||
# On any failure (timeout, error), falls back to original transcription.
|
||||
#
|
||||
# [output.post_process]
|
||||
# command = "ollama run llama3.2:1b 'Clean up this dictation. Fix grammar, remove filler words. Output only the cleaned text:'"
|
||||
# timeout_ms = 30000 # 30 second timeout (generous for LLM)
|
||||
|
||||
[output.notification]
|
||||
# Show notification when recording starts (hotkey pressed)
|
||||
on_recording_start = false
|
||||
|
||||
# Show notification when recording stops (transcription beginning)
|
||||
on_recording_stop = false
|
||||
|
||||
# Show notification with transcribed text after transcription completes
|
||||
on_transcription = false
|
||||
|
||||
# [text]
|
||||
# Text processing options (word replacements, spoken punctuation)
|
||||
#
|
||||
# Enable spoken punctuation conversion (e.g., say "period" to get ".")
|
||||
# spoken_punctuation = false
|
||||
#
|
||||
# Custom word replacements (case-insensitive)
|
||||
# replacements = { "hyperwhisper" = "hyprwhspr" }
|
||||
49
.config/walker/config.toml
Normal file
49
.config/walker/config.toml
Normal file
@@ -0,0 +1,49 @@
|
||||
force_keyboard_focus = true # forces keyboard focuses to stay in Walker
|
||||
selection_wrap = true # wrap list if at bottom or top
|
||||
theme = "station-default" # theme to use
|
||||
# additional_theme_location = "~/.config/walker/themes/"
|
||||
hide_action_hints = true # globally hide the action hints
|
||||
|
||||
[placeholders]
|
||||
"default" = { input = " Search...", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other"
|
||||
|
||||
[keybinds]
|
||||
quick_activate = []
|
||||
|
||||
[columns]
|
||||
symbols = 1 # providers to be queried by default
|
||||
|
||||
[providers]
|
||||
max_results = 256 # 256 should be enough for everyone
|
||||
default = [
|
||||
"desktopapplications",
|
||||
"websearch",
|
||||
]
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = "/"
|
||||
provider = "providerlist"
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = "."
|
||||
provider = "files"
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = ":"
|
||||
provider = "symbols"
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = "="
|
||||
provider = "calc"
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = "@"
|
||||
provider = "websearch"
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = "$"
|
||||
provider = "clipboard"
|
||||
|
||||
[[emergencies]]
|
||||
text = "Restart Walker"
|
||||
command = "omarchy-restart-walker"
|
||||
156
.config/walker/themes/station-default/layout.xml
Normal file
156
.config/walker/themes/station-default/layout.xml
Normal file
@@ -0,0 +1,156 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk" version="4.0"></requires>
|
||||
<object class="GtkWindow" id="Window">
|
||||
<style>
|
||||
<class name="window"></class>
|
||||
</style>
|
||||
<property name="resizable">true</property>
|
||||
<property name="title">Walker</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="BoxWrapper">
|
||||
<style>
|
||||
<class name="box-wrapper"></class>
|
||||
</style>
|
||||
<property name="width-request">644</property>
|
||||
<property name="overflow">hidden</property>
|
||||
<property name="orientation">horizontal</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="halign">center</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="Box">
|
||||
<style>
|
||||
<class name="box"></class>
|
||||
</style>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="hexpand-set">true</property>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="SearchContainer">
|
||||
<style>
|
||||
<class name="search-container"></class>
|
||||
</style>
|
||||
<property name="overflow">hidden</property>
|
||||
<property name="orientation">horizontal</property>
|
||||
<property name="halign">fill</property>
|
||||
<property name="hexpand-set">true</property>
|
||||
<property name="hexpand">true</property>
|
||||
<child>
|
||||
<object class="GtkEntry" id="Input">
|
||||
<style>
|
||||
<class name="input"></class>
|
||||
</style>
|
||||
<property name="halign">fill</property>
|
||||
<property name="hexpand-set">true</property>
|
||||
<property name="hexpand">true</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="ContentContainer">
|
||||
<style>
|
||||
<class name="content-container"></class>
|
||||
</style>
|
||||
<property name="orientation">horizontal</property>
|
||||
<property name="spacing">10</property>
|
||||
<property name="vexpand">true</property>
|
||||
<property name="vexpand-set">true</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="ElephantHint">
|
||||
<style>
|
||||
<class name="elephant-hint"></class>
|
||||
</style>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="height-request">100</property>
|
||||
<property name="label">Waiting for elephant...</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="Placeholder">
|
||||
<style>
|
||||
<class name="placeholder"></class>
|
||||
</style>
|
||||
<property name="label">No Results</property>
|
||||
<property name="yalign">0.0</property>
|
||||
<property name="hexpand">true</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="Scroll">
|
||||
<style>
|
||||
<class name="scroll"></class>
|
||||
</style>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="can_focus">false</property>
|
||||
<property name="overlay-scrolling">true</property>
|
||||
<property name="max-content-width">600</property>
|
||||
<property name="max-content-height">300</property>
|
||||
<property name="min-content-height">0</property>
|
||||
<property name="propagate-natural-height">true</property>
|
||||
<property name="propagate-natural-width">true</property>
|
||||
<property name="hscrollbar-policy">automatic</property>
|
||||
<property name="vscrollbar-policy">automatic</property>
|
||||
<child>
|
||||
<object class="GtkGridView" id="List">
|
||||
<style>
|
||||
<class name="list"></class>
|
||||
</style>
|
||||
<property name="max_columns">1</property>
|
||||
<property name="can_focus">false</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="Preview">
|
||||
<style>
|
||||
<class name="preview"></class>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="Keybinds">
|
||||
<property name="hexpand">true</property>
|
||||
<property name="margin-top">10</property>
|
||||
<style>
|
||||
<class name="keybinds"></class>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkBox" id="GlobalKeybinds">
|
||||
<property name="spacing">10</property>
|
||||
<style>
|
||||
<class name="global-keybinds"></class>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="ItemKeybinds">
|
||||
<property name="hexpand">true</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="spacing">10</property>
|
||||
<style>
|
||||
<class name="item-keybinds"></class>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="Error">
|
||||
<style>
|
||||
<class name="error"></class>
|
||||
</style>
|
||||
<property name="xalign">0</property>
|
||||
<property name="visible">false</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
116
.config/walker/themes/station-default/style.css
Normal file
116
.config/walker/themes/station-default/style.css
Normal file
@@ -0,0 +1,116 @@
|
||||
@import "../../../../.cache/wal/colors-waybar.css";
|
||||
|
||||
* {
|
||||
all: unset;
|
||||
}
|
||||
|
||||
* {
|
||||
font-family: monospace;
|
||||
font-size: 18px;
|
||||
color: @foreground;
|
||||
}
|
||||
|
||||
scrollbar {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.normal-icons {
|
||||
-gtk-icon-size: 16px;
|
||||
}
|
||||
|
||||
.large-icons {
|
||||
-gtk-icon-size: 32px;
|
||||
}
|
||||
|
||||
.box-wrapper {
|
||||
background: alpha(@background, 0.95);
|
||||
padding: 20px;
|
||||
border: 2px solid @foreground;
|
||||
}
|
||||
|
||||
.preview-box {
|
||||
}
|
||||
|
||||
.box {
|
||||
}
|
||||
|
||||
.search-container {
|
||||
background: @background;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.input placeholder {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.input {
|
||||
}
|
||||
|
||||
.input:focus,
|
||||
.input:active {
|
||||
box-shadow: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.content-container {
|
||||
}
|
||||
|
||||
.placeholder {
|
||||
}
|
||||
|
||||
.scroll {
|
||||
}
|
||||
|
||||
.list {
|
||||
}
|
||||
|
||||
child,
|
||||
child > * {
|
||||
}
|
||||
|
||||
child:hover .item-box {
|
||||
}
|
||||
|
||||
child:selected .item-box {
|
||||
}
|
||||
|
||||
child:selected .item-box * {
|
||||
color: @color14;
|
||||
}
|
||||
|
||||
.item-box {
|
||||
padding-left: 14px;
|
||||
}
|
||||
|
||||
.item-text-box {
|
||||
all: unset;
|
||||
padding: 14px 0;
|
||||
}
|
||||
|
||||
.item-text {
|
||||
}
|
||||
|
||||
.item-subtext {
|
||||
font-size: 0px;
|
||||
min-height: 0px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.item-image {
|
||||
margin-right: 14px;
|
||||
-gtk-icon-transform: scale(0.9);
|
||||
}
|
||||
|
||||
.current {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.keybind-hints {
|
||||
background: @background;
|
||||
padding: 10px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.preview {
|
||||
}
|
||||
@@ -1,80 +1,162 @@
|
||||
{
|
||||
"reload_style_on_change": true,
|
||||
"layer": "top",
|
||||
"position": "top",
|
||||
"mod": "dock",
|
||||
"exclusice": true,
|
||||
"passthrough": false,
|
||||
"gtk-layer-shell": true,
|
||||
"height": 0,
|
||||
"modules-left": [
|
||||
"hyprland/workspaces"
|
||||
],
|
||||
"modules-center": ["hyprland/window"],
|
||||
"spacing": 0,
|
||||
"height": 26,
|
||||
"modules-left": ["custom/station", "hyprland/workspaces"],
|
||||
"modules-center": ["clock", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
|
||||
"modules-right": [
|
||||
"tray",
|
||||
"custom/updates",
|
||||
"hyprland/language",
|
||||
"group/tray-expander",
|
||||
"bluetooth",
|
||||
"network",
|
||||
"pulseaudio",
|
||||
"pulseaudio#microphone",
|
||||
"clock",
|
||||
"custom/weather"
|
||||
"cpu",
|
||||
"battery"
|
||||
],
|
||||
"hyprland/window": {
|
||||
"format": {}
|
||||
},
|
||||
"hyprland/workspaces": {
|
||||
"disable-scroll": true,
|
||||
"all-outputs": true,
|
||||
"on-click": "activate",
|
||||
"persisten_workspaces": {
|
||||
"1": []
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"default": "",
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": "",
|
||||
"6": "",
|
||||
"7": "",
|
||||
"8": "",
|
||||
"9": "",
|
||||
"10": "",
|
||||
},
|
||||
"persistent-workspaces": {
|
||||
"DP-1": [1, 3, 5, 7, 9],
|
||||
"DP-2": [2, 4, 6, 8, 10]
|
||||
}
|
||||
},
|
||||
"hyprland/language": {
|
||||
"format": "{}",
|
||||
"format-en": "EN",
|
||||
"format-ro": "RO"
|
||||
"custom/station": {
|
||||
"format": "<span font='station'>\ueb6a</span>",
|
||||
"on-click": "station-menu",
|
||||
"on-click-right": "xdg-terminal-exec",
|
||||
"tooltip-format": "Station Menu\n\nSuper + Alt + Space"
|
||||
},
|
||||
"custom/weather": {
|
||||
"tooltip": true,
|
||||
"format": "{}",
|
||||
"interval": 30,
|
||||
"exec": "~/.config/waybar/scripts/waybar-wttr.py",
|
||||
"return-type": "json"
|
||||
},
|
||||
"tray": {
|
||||
"icon-size": 16,
|
||||
"spacing": 10
|
||||
|
||||
"cpu": {
|
||||
"interval": 5,
|
||||
"format": "",
|
||||
"on-click": "station-launch-or-focus-tui btop",
|
||||
"on-click-right": "ghostty"
|
||||
},
|
||||
"clock": {
|
||||
"format": "{:%R %d%M}",
|
||||
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>"
|
||||
"format": "{:L%A %H:%M}",
|
||||
"format-alt": "{:L%d %B W%V %Y}",
|
||||
"tooltip": false,
|
||||
"on-click-right": "station-launch-floating-terminal-with-presentation station-tz-select"
|
||||
},
|
||||
"network": {
|
||||
"format-icons": ["", "", "", "", ""],
|
||||
"format": "{icon}",
|
||||
"format-wifi": "{icon}",
|
||||
"format-ethernet": "",
|
||||
"format-disconnected": "",
|
||||
"tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
|
||||
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
|
||||
"tooltip-format-disconnected": "Disconnected",
|
||||
"interval": 3,
|
||||
"spacing": 1,
|
||||
"on-click": "station-launch-wifi"
|
||||
},
|
||||
"battery": {
|
||||
"format": "{capacity}% {icon}",
|
||||
"format-discharging": "{icon}",
|
||||
"format-charging": "{icon}",
|
||||
"format-plugged": "",
|
||||
"format-icons": {
|
||||
"charging": ["", "", "", "", "", "", "", "", "", ""],
|
||||
"default": ["", "", "", "", "", "", "", "", "", ""]
|
||||
},
|
||||
"format-full": "",
|
||||
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
|
||||
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
|
||||
"interval": 5,
|
||||
"on-click": "station-menu power",
|
||||
"states": {
|
||||
"warning": 20,
|
||||
"critical": 10
|
||||
}
|
||||
},
|
||||
"bluetooth": {
|
||||
"format": "",
|
||||
"format-off": "",
|
||||
"format-disabled": "",
|
||||
"format-connected": "",
|
||||
"format-no-controller": "",
|
||||
"tooltip-format": "Devices connected: {num_connections}",
|
||||
"on-click": "station-launch-bluetooth"
|
||||
},
|
||||
"pulseaudio": {
|
||||
"format": "{icon} {volume}%",
|
||||
"tooltip": false,
|
||||
"format-muted": "Muted",
|
||||
"on-click": "pamixer -t",
|
||||
"on-scroll-up": "pamixer -i 5",
|
||||
"on-scroll-down": "pamixer -d 5",
|
||||
"scroll-step": 5
|
||||
// "format-icons": {
|
||||
// "headphones": "",
|
||||
// "hands-free": "",
|
||||
// "headset": "",
|
||||
// "phone": "",
|
||||
// "portable": "",
|
||||
// "car": "",
|
||||
// "default": ["", "", ""]
|
||||
// }
|
||||
"format": "{icon}",
|
||||
"on-click": "station-launch-audio",
|
||||
"on-click-right": "pamixer -t",
|
||||
"tooltip-format": "Playing at {volume}%",
|
||||
"scroll-step": 5,
|
||||
"format-muted": "",
|
||||
"format-icons": {
|
||||
"headphone": "",
|
||||
"headset": "",
|
||||
"default": ["", "", ""]
|
||||
}
|
||||
},
|
||||
"pulseaudio#microphone": {
|
||||
"format": "{format_source}",
|
||||
"format-source": "{volume}%",
|
||||
"format-source-muted": "Muted",
|
||||
"on-click": "pamixer --default-source -t",
|
||||
"on-scroll-up": "pamixer --default-source -i 5",
|
||||
"on-scroll-down": "pamixer --default-source -d 5",
|
||||
"scroll-step": 5
|
||||
"group/tray-expander": {
|
||||
"orientation": "inherit",
|
||||
"drawer": {
|
||||
"transition-duration": 600,
|
||||
"children-class": "tray-group-item"
|
||||
},
|
||||
"modules": ["custom/expand-icon", "tray"]
|
||||
},
|
||||
"custom/expand-icon": {
|
||||
"format": "",
|
||||
"tooltip": false,
|
||||
"on-scroll-up": "",
|
||||
"on-scroll-down": "",
|
||||
"on-scroll-left": "",
|
||||
"on-scroll-right": ""
|
||||
},
|
||||
"custom/screenrecording-indicator": {
|
||||
"on-click": "station-cmd-screenrecord",
|
||||
"exec": "$HOME/.config/waybar/indicators/screen-recording.sh",
|
||||
"signal": 8,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/idle-indicator": {
|
||||
"on-click": "station-toggle-idle",
|
||||
"exec": "$HOME/.config/waybar/indicators/idle.sh",
|
||||
"signal": 9,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/notification-silencing-indicator": {
|
||||
"on-click": "station-toggle-notification-silencing",
|
||||
"exec": "$HOME/.config/waybar/indicators/notification-silencing.sh",
|
||||
"signal": 10,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/voxtype": {
|
||||
"exec": "station-voxtype-status",
|
||||
"return-type": "json",
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"idle": "",
|
||||
"recording": "",
|
||||
"transcribing": ""
|
||||
},
|
||||
"tooltip": true,
|
||||
"on-click-right": "station-voxtype-config",
|
||||
"on-click": "station-voxtype-model"
|
||||
},
|
||||
"tray": {
|
||||
"icon-size": 12,
|
||||
"spacing": 17
|
||||
}
|
||||
}
|
||||
|
||||
7
.config/waybar/indicators/idle.sh
Executable file
7
.config/waybar/indicators/idle.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
if pgrep -x hypridle >/dev/null; then
|
||||
echo '{"text": ""}'
|
||||
else
|
||||
echo '{"text": "", "tooltip": "Idle lock disabled", "class": "active"}'
|
||||
fi
|
||||
7
.config/waybar/indicators/notification-silencing.sh
Executable file
7
.config/waybar/indicators/notification-silencing.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
if makoctl mode | grep -q 'do-not-disturb'; then
|
||||
echo '{"text": "", "tooltip": "Notifications silenced", "class": "active"}'
|
||||
else
|
||||
echo '{"text": ""}'
|
||||
fi
|
||||
7
.config/waybar/indicators/screen-recording.sh
Executable file
7
.config/waybar/indicators/screen-recording.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
if pgrep -f "^gpu-screen-recorder" >/dev/null; then
|
||||
echo '{"text": "", "tooltip": "Stop recording", "class": "active"}'
|
||||
else
|
||||
echo '{"text": ""}'
|
||||
fi
|
||||
@@ -1,124 +0,0 @@
|
||||
#!/run/current-system/sw/bin/python
|
||||
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
import requests
|
||||
|
||||
WEATHER_CODES = {
|
||||
"113": "Sunny",
|
||||
"116": "Patchy",
|
||||
"119": "Cloudy",
|
||||
"122": "Cloudy",
|
||||
"143": "Cloudy",
|
||||
"176": "Rain",
|
||||
"179": "Rain",
|
||||
"182": "Rain",
|
||||
"185": "Rain",
|
||||
"200": "Storm",
|
||||
"227": "Rain",
|
||||
"230": "Rain",
|
||||
"248": "Cloudy",
|
||||
"260": "Cloudy",
|
||||
"263": "Rain",
|
||||
"266": "Rain",
|
||||
"281": "Rain",
|
||||
"284": "Rain",
|
||||
"293": "Rain",
|
||||
"296": "Rain",
|
||||
"299": "Rain",
|
||||
"302": "Rain",
|
||||
"305": "Rain",
|
||||
"308": "Rain",
|
||||
"311": "Rain",
|
||||
"314": "Rain",
|
||||
"317": "Rain",
|
||||
"320": "Rain",
|
||||
"323": "Rain",
|
||||
"326": "Rain",
|
||||
"329": "Snow",
|
||||
"332": "Snow",
|
||||
"335": "Snow",
|
||||
"338": "Snow",
|
||||
"350": "Rain",
|
||||
"353": "Rain",
|
||||
"356": "Rain",
|
||||
"359": "Rain",
|
||||
"362": "Rain",
|
||||
"365": "Rain",
|
||||
"368": "Rain",
|
||||
"371": "Snow",
|
||||
"374": "Rain",
|
||||
"377": "Rain",
|
||||
"386": "Rain",
|
||||
"389": "Rain",
|
||||
"392": "Rain",
|
||||
"395": "Snow",
|
||||
}
|
||||
|
||||
data = {}
|
||||
|
||||
weather = request.get("https://wttr.in/?format=j1").json()
|
||||
|
||||
def format_time(time):
|
||||
return time.replace("00", "").zfill(2)
|
||||
|
||||
def format_temp(temp):
|
||||
return(temp["FeelsLikeC"] + "o").ljust(3)
|
||||
|
||||
def format_chances(hour):
|
||||
chances = {
|
||||
"chancesoffog": "Fog",
|
||||
"chancesoffrost": "Frost",
|
||||
"chancesofovercast": "Overcast",
|
||||
"chancesofrain": "Rain",
|
||||
"chancesofsnow": "Snow",
|
||||
"chancesofsunshine": "Sunshine",
|
||||
"chancesofthunder": "Thunder",
|
||||
"chancesofwindy": "Wind",
|
||||
}
|
||||
|
||||
conditions = []
|
||||
for event in chances.keys():
|
||||
if int(hour[event]) > 0:
|
||||
conditions.append(chances[event] + "" + hour[event] + "%")
|
||||
return ", ".join(conditions)
|
||||
|
||||
tempint = int(weather["current_condition"][0]["FeelsLikeC"])
|
||||
extrachar = ""
|
||||
if tempint > 0 and tempint < 10:
|
||||
extrachar = "+"
|
||||
|
||||
data["text"] = (
|
||||
" "
|
||||
+ WEATHER_CODES[weather["current_condition"][0]["weatherCode"]]
|
||||
+ " "
|
||||
+ extrachar
|
||||
+ weather["current_condition"][0]["FeelsLikeC"]
|
||||
+ "o"
|
||||
)
|
||||
|
||||
data["tooltip"] = (
|
||||
f"<b>{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_C']}o</b>\n"
|
||||
)
|
||||
data["tooltip"] += f"Feels like: {weather['current_condition'][0]['FeelsLikeC']}o\n"
|
||||
data["tooltip"] += f"Wind: {weather['current_condition'][0]['WindspeedKmph']}Km/h\n"
|
||||
data["tooltip"] += f"Humidity: {weather['current_condition'][0]['FeelsLikeC']}%\n"
|
||||
for i, day in enumerate(weather["weather"]):
|
||||
data["tooltip"] += f"\n<b>"
|
||||
if i == 0:
|
||||
data["tooltip"] += "Today, "
|
||||
if i == 1:
|
||||
data["tooltip"] += "Tomorrow, "
|
||||
data["tooltip"] += f"{day['date']}</b>\n"
|
||||
data["tooltip"] += f"Up {day['maxtempC']}o Down {day['mintempC']}o "
|
||||
data["tooltip"] += f"Sunrise {day['astronomy'][0]['sunrise']} Sunset {day['astronomy'][0]['sunset']} \n"
|
||||
|
||||
for hour in day["hourly"]:
|
||||
if i == 0"
|
||||
if int(format_time(hour["time"])) < datetime.now().hour - 2:
|
||||
continue
|
||||
|
||||
data["tooltip"] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeC'])} {hour['weatherDesc'][0]['value']}, {format_chances(hour)}\n"
|
||||
|
||||
print(json.dumps(data))
|
||||
@@ -1,149 +1,111 @@
|
||||
@import "../../.cache/wal/colors-waybar.css";
|
||||
|
||||
* {
|
||||
background-color: @background;
|
||||
color: @foreground;
|
||||
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
font-family:
|
||||
JetBrains Mono Nerd Font,
|
||||
monospace;
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
min-height: 0;
|
||||
font-family: 'Fira Code Nerd Font';
|
||||
font-size: 20px;
|
||||
margin: 1px 0;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background: rgba(21, 18, 27, 0);
|
||||
color: #cdd6f4;
|
||||
.modules-left {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
tooltip {
|
||||
background: #1e1e2e;
|
||||
border-radius: 10px;
|
||||
border-width: 2px;
|
||||
border-style: solid;
|
||||
border-color: #11111b;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 5px;
|
||||
color: #313244;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
#workspaces button.active {
|
||||
color: #a6adc8;
|
||||
}
|
||||
|
||||
#workspaces button.focused {
|
||||
color: #a6adc8;
|
||||
background: #eba0ac;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
color: #11111b;
|
||||
background: #a6e3a1;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#workspaces button.active {
|
||||
color: #11111b;
|
||||
background: #cdd6f4;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#language,
|
||||
#custom-updates,
|
||||
#custom-caffeine,
|
||||
#custom-weather,
|
||||
#window,
|
||||
#clock,
|
||||
#battery,
|
||||
#pulseaudio,
|
||||
#network,
|
||||
#workspaces,
|
||||
#tray,
|
||||
#backlight {
|
||||
background: #1e1e2e;
|
||||
padding: 0px 10px;
|
||||
margin: 3px 0px;
|
||||
margin-top: 10px;
|
||||
border: 1px solid #181825;
|
||||
}
|
||||
|
||||
#tray {
|
||||
border-radius: 10px;
|
||||
margin-right: 10px;
|
||||
.modules-right {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
#workspaces {
|
||||
background: #1e1e2e;
|
||||
border-radius: 10px;
|
||||
margin-left: 10px;
|
||||
padding-right: 0px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
#custom-caffeine {
|
||||
color: #89dceb;
|
||||
border-radius: 10px 0 0 10px;
|
||||
border-right: 0;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
#custom-language {
|
||||
color: #f38ba8;
|
||||
border-right: 0;
|
||||
border-left: 0;
|
||||
#workspaces button {
|
||||
all: initial;
|
||||
padding: 0 6px;
|
||||
margin: 0 1.5px;
|
||||
margin: 0 5px;
|
||||
min-width: 15px;
|
||||
color: blue;
|
||||
}
|
||||
|
||||
#custom-updates {
|
||||
color: #f5c2e7;
|
||||
border-radius: 10px 0 0 10px;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
#workspaces button.empty {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
#window {
|
||||
border-radius: 10px;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
#workspaces button.active .workspace-label {
|
||||
color: @color13;
|
||||
}
|
||||
|
||||
#clock {
|
||||
color: #fab387;
|
||||
border-radius: 10px 0 0 10px;
|
||||
margin-left: 5px;
|
||||
border-right: 0px;
|
||||
#cpu,
|
||||
#battery,
|
||||
#pulseaudio,
|
||||
#custom-omarchy,
|
||||
#custom-update {
|
||||
min-width: 12px;
|
||||
margin: 0 7.5px;
|
||||
}
|
||||
|
||||
#tray {
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
#bluetooth {
|
||||
margin-right: 17px;
|
||||
}
|
||||
|
||||
#network {
|
||||
color: #f9e2af;
|
||||
border-left: 0px;
|
||||
border-right: 0px;
|
||||
margin-right: 13px;
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
color: #89b4fa;
|
||||
border-left: 0px;
|
||||
border-right: 0px;
|
||||
#custom-expand-icon {
|
||||
margin-right: 18px;
|
||||
}
|
||||
|
||||
#pulseaudio.microphone {
|
||||
color: #cba6f7;
|
||||
border-radius: 0 10px 10px 0;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
margin-right: 5px;
|
||||
tooltip {
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
#battery {
|
||||
color: #a6e3a1;
|
||||
border-radius: 0 10px 10px 0;
|
||||
margin-right: 10px;
|
||||
border-left: 0px;
|
||||
#custom-update {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
#custom-weather {
|
||||
border-radius: 0 10px 10px 0;
|
||||
border-right: 0;
|
||||
margin-left: 0;
|
||||
#clock {
|
||||
margin-left: 8.75px;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#custom-screenrecording-indicator,
|
||||
#custom-idle-indicator,
|
||||
#custom-notification-silencing-indicator {
|
||||
min-width: 12px;
|
||||
margin-left: 5px;
|
||||
margin-right: 0;
|
||||
font-size: 10px;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
|
||||
#custom-screenrecording-indicator.active {
|
||||
color: #a55555;
|
||||
}
|
||||
|
||||
#custom-idle-indicator.active,
|
||||
#custom-notification-silencing-indicator.active {
|
||||
color: #a55555;
|
||||
}
|
||||
|
||||
#custom-voxtype {
|
||||
min-width: 12px;
|
||||
margin: 0 0 0 7.5px;
|
||||
}
|
||||
|
||||
#custom-voxtype.recording {
|
||||
color: #a55555;
|
||||
}
|
||||
|
||||
5
.config/wiremix/wiremix.toml
Normal file
5
.config/wiremix/wiremix.toml
Normal file
@@ -0,0 +1,5 @@
|
||||
# overwrites default wiremix configuration
|
||||
# defaults: https://github.com/tsowell/wiremix/blob/main/wiremix.toml
|
||||
|
||||
[char_sets.default]
|
||||
default_device = "⮞"
|
||||
268
.config/xournalpp/settings.xml
Normal file
268
.config/xournalpp/settings.xml
Normal file
@@ -0,0 +1,268 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--The Xournal++ settings file. Do not edit this file! Most settings are available in the Settings dialog, the others are commented in this file, but handle with care!-->
|
||||
<settings>
|
||||
<property name="pressureSensitivity" value="true"/>
|
||||
<property name="minimumPressure" value="0.05"/>
|
||||
<property name="pressureMultiplier" value="1"/>
|
||||
<property name="zoomGesturesEnabled" value="true"/>
|
||||
<property name="selectedToolbar" value="Portrait"/>
|
||||
<property name="lastSavePath" value="/home/dhh/Downloads"/>
|
||||
<property name="lastOpenPath" value=""/>
|
||||
<property name="lastImagePath" value="/home/dhh/Dropbox/Images"/>
|
||||
<property name="edgePanSpeed" value="20"/>
|
||||
<property name="edgePanMaxMult" value="5"/>
|
||||
<property name="zoomStep" value="10"/>
|
||||
<property name="zoomStepScroll" value="2"/>
|
||||
<property name="displayDpi" value="72"/>
|
||||
<property name="mainWndWidth" value="800"/>
|
||||
<property name="mainWndHeight" value="600"/>
|
||||
<property name="maximized" value="true"/>
|
||||
<property name="showToolbar" value="true"/>
|
||||
<property name="showSidebar" value="true"/>
|
||||
<property name="sidebarWidth" value="150"/>
|
||||
<property name="sidebarNumberingStyle" value="1"/>
|
||||
<property name="sidebarOnRight" value="false"/>
|
||||
<property name="scrollbarOnLeft" value="false"/>
|
||||
<property name="menubarVisible" value="true"/>
|
||||
<property name="filepathShownInTitlebar" value="false"/>
|
||||
<property name="numColumns" value="1"/>
|
||||
<property name="numRows" value="1"/>
|
||||
<property name="viewFixedRows" value="false"/>
|
||||
<property name="showPairedPages" value="false"/>
|
||||
<property name="layoutVertical" value="false"/>
|
||||
<property name="layoutRightToLeft" value="false"/>
|
||||
<property name="layoutBottomToTop" value="false"/>
|
||||
<property name="numPairsOffset" value="1"/>
|
||||
<!--The icon theme, allowed values are "disabled", "onDrawOfLastPage", and "onScrollOfLastPage"-->
|
||||
<property name="emptyLastPageAppend" value="disabled"/>
|
||||
<property name="presentationMode" value="false"/>
|
||||
<!--Which GUI elements are shown in default view mode, separated by a colon (,)-->
|
||||
<property name="defaultViewModeAttributes" value="showMenubar,showToolbar,showSidebar"/>
|
||||
<!--Which GUI elements are shown in fullscreen view mode, separated by a colon (,)-->
|
||||
<property name="fullscreenViewModeAttributes" value="goFullscren,showToolbar,showSidebar"/>
|
||||
<!--Which GUI elements are shown in presentation view mode, separated by a colon (,)-->
|
||||
<property name="presentationViewModeAttributes" value="goFullscren,showToolbar"/>
|
||||
<!--The cursor icon used with a stylus, allowed values are "none", "dot", "big", "arrow"-->
|
||||
<property name="stylusCursorType" value="dot"/>
|
||||
<!--The eraser cursor visibility used with a stylus, allowed values are "never", "always", "hover", "touch"-->
|
||||
<property name="eraserVisibility" value="always"/>
|
||||
<!--The icon theme, allowed values are "iconsColor", "iconsLucide"-->
|
||||
<property name="iconTheme" value="iconsColor"/>
|
||||
<!--Dark/light mode, allowed values are "useSystem", "forceLight", "forceDark"-->
|
||||
<property name="themeVariant" value="forceDark"/>
|
||||
<property name="highlightPosition" value="false"/>
|
||||
<property name="cursorHighlightColor" value="2164260608"/>
|
||||
<property name="cursorHighlightBorderColor" value="2147483903"/>
|
||||
<property name="cursorHighlightRadius" value="30"/>
|
||||
<property name="cursorHighlightBorderWidth" value="0"/>
|
||||
<property name="useStockIcons" value="false"/>
|
||||
<property name="disableScrollbarFadeout" value="false"/>
|
||||
<property name="disableAudio" value="false"/>
|
||||
<!--Hides scroolbars in the main window, allowed values: "none", "horizontal", "vertical", "both"-->
|
||||
<property name="scrollbarHideType" value="none"/>
|
||||
<property name="autoloadMostRecent" value="false"/>
|
||||
<property name="autoloadPdfXoj" value="true"/>
|
||||
<property name="defaultSaveName" value="%F-Note-%H-%M"/>
|
||||
<property name="defaultPdfExportName" value="%{name}_annotated"/>
|
||||
<property name="autosaveEnabled" value="true"/>
|
||||
<property name="autosaveTimeout" value="3"/>
|
||||
<property name="addHorizontalSpace" value="false"/>
|
||||
<property name="addHorizontalSpaceAmount" value="150"/>
|
||||
<property name="addVerticalSpace" value="false"/>
|
||||
<property name="addVerticalSpaceAmount" value="150"/>
|
||||
<property name="drawDirModsEnabled" value="false"/>
|
||||
<property name="drawDirModsRadius" value="50"/>
|
||||
<property name="snapRotation" value="true"/>
|
||||
<property name="snapRotationTolerance" value="0.3"/>
|
||||
<property name="snapGrid" value="true"/>
|
||||
<property name="snapGridTolerance" value="0.5"/>
|
||||
<property name="snapGridSize" value="14.17"/>
|
||||
<property name="strokeRecognizerMinSize" value="40"/>
|
||||
<property name="touchDrawing" value="false"/>
|
||||
<property name="gtkTouchInertialScrolling" value="true"/>
|
||||
<property name="pressureGuessing" value="false"/>
|
||||
<property name="selectionBorderColor" value="4294901760"/>
|
||||
<property name="backgroundColor" value="4292664021"/>
|
||||
<property name="selectionMarkerColor" value="4285702095"/>
|
||||
<property name="touchZoomStartThreshold" value="0"/>
|
||||
<property name="pageRerenderThreshold" value="5"/>
|
||||
<!--The count of rendered PDF pages which will be cached.-->
|
||||
<property name="pdfPageCacheSize" value="10"/>
|
||||
<property name="preloadPagesBefore" value="3"/>
|
||||
<property name="preloadPagesAfter" value="5"/>
|
||||
<property name="eagerPageCleanup" value="true"/>
|
||||
<!--Config for new pages-->
|
||||
<property name="pageTemplate" value="xoj/template copyLastPageSettings=true size=595.275591x841.889764 backgroundType=lined backgroundColor=#ffffff "/>
|
||||
<property name="sizeUnit" value=""/>
|
||||
<property name="audioFolder" value=""/>
|
||||
<property name="audioInputDevice" value="-1"/>
|
||||
<property name="audioOutputDevice" value="-1"/>
|
||||
<property name="audioSampleRate" value="44100"/>
|
||||
<property name="audioGain" value="1"/>
|
||||
<property name="defaultSeekTime" value="5"/>
|
||||
<property name="pluginEnabled" value=""/>
|
||||
<property name="pluginDisabled" value=""/>
|
||||
<property name="strokeFilterIgnoreTime" value="150"/>
|
||||
<property name="strokeFilterIgnoreLength" value="1"/>
|
||||
<property name="strokeFilterSuccessiveTime" value="500"/>
|
||||
<property name="strokeFilterEnabled" value="false"/>
|
||||
<property name="doActionOnStrokeFiltered" value="false"/>
|
||||
<property name="trySelectOnStrokeFiltered" value="false"/>
|
||||
<property name="snapRecognizedShapesEnabled" value="false"/>
|
||||
<property name="restoreLineWidthEnabled" value="false"/>
|
||||
<property name="numIgnoredStylusEvents" value="0"/>
|
||||
<property name="inputSystemTPCButton" value="false"/>
|
||||
<property name="inputSystemDrawOutsideWindow" value="true"/>
|
||||
<property name="preferredLocale" value=""/>
|
||||
<property name="stabilizerAveragingMethod" value="0"/>
|
||||
<property name="stabilizerPreprocessor" value="0"/>
|
||||
<property name="stabilizerBuffersize" value="20"/>
|
||||
<property name="stabilizerSigma" value="0.5"/>
|
||||
<property name="stabilizerDeadzoneRadius" value="1.3"/>
|
||||
<property name="stabilizerDrag" value="0.4"/>
|
||||
<property name="stabilizerMass" value="5"/>
|
||||
<property name="stabilizerCuspDetection" value="true"/>
|
||||
<property name="stabilizerFinalizeStroke" value="true"/>
|
||||
<property name="latexSettings.autoCheckDependencies" value="true"/>
|
||||
<property name="latexSettings.defaultText" value="x^2"/>
|
||||
<property name="latexSettings.globalTemplatePath" value="/usr/share/xournalpp/resources/default_template.tex"/>
|
||||
<property name="latexSettings.genCmd" value="pdflatex -halt-on-error -interaction=nonstopmode '{}'"/>
|
||||
<property name="latexSettings.sourceViewThemeId" value=""/>
|
||||
<property name="latexSettings.editorFont" value="Monospace 12"/>
|
||||
<property name="latexSettings.useCustomEditorFont" value="false"/>
|
||||
<property name="latexSettings.editorWordWrap" value="true"/>
|
||||
<property name="latexSettings.sourceViewAutoIndent" value="true"/>
|
||||
<property name="latexSettings.sourceViewSyntaxHighlight" value="true"/>
|
||||
<property name="latexSettings.sourceViewShowLineNumbers" value="false"/>
|
||||
<property name="font" font="Sans" size="12"/>
|
||||
<data name="buttonConfig">
|
||||
<data name="default">
|
||||
<attribute name="color" type="hex" value="ff000000"/>
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
<attribute name="size" type="string" value="thin"/>
|
||||
<attribute name="tool" type="string" value="pen"/>
|
||||
</data>
|
||||
<data name="eraser">
|
||||
<attribute name="eraserMode" type="string" value="none"/>
|
||||
<attribute name="size" type="string" value="none"/>
|
||||
<attribute name="tool" type="string" value="eraser"/>
|
||||
</data>
|
||||
<data name="middle">
|
||||
<attribute name="tool" type="string" value="hand"/>
|
||||
</data>
|
||||
<data name="right">
|
||||
<attribute name="tool" type="string" value="none"/>
|
||||
</data>
|
||||
<data name="stylus">
|
||||
<attribute name="tool" type="string" value="none"/>
|
||||
</data>
|
||||
<data name="stylus2">
|
||||
<attribute name="tool" type="string" value="none"/>
|
||||
</data>
|
||||
<data name="touch">
|
||||
<attribute name="device" type="string" value=""/>
|
||||
<attribute name="disableDrawing" type="boolean" value="false"/>
|
||||
<attribute name="tool" type="string" value="none"/>
|
||||
</data>
|
||||
</data>
|
||||
<data name="deviceClasses">
|
||||
<data name="Wayland Finger Scrolling">
|
||||
<attribute name="deviceClass" type="int" value="1"/>
|
||||
<attribute name="deviceSource" type="int" value="6"/>
|
||||
</data>
|
||||
<data name="Wayland Pointer">
|
||||
<attribute name="deviceClass" type="int" value="1"/>
|
||||
<attribute name="deviceSource" type="int" value="0"/>
|
||||
</data>
|
||||
</data>
|
||||
<data name="tools">
|
||||
<attribute name="current" type="string" value="text"/>
|
||||
<data name="drawArrow">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="drawCoordinateSystem">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="drawDoubleArrow">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="drawEllipse">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="drawRect">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="drawSpline">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="eraser">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
<attribute name="size" type="string" value="MEDIUM"/>
|
||||
<attribute name="type" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="hand">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="highlighter">
|
||||
<attribute name="color" type="hex" value="ffffff00"/>
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
<attribute name="fill" type="int" value="0"/>
|
||||
<attribute name="fillAlpha" type="int" value="128"/>
|
||||
<attribute name="size" type="string" value="MEDIUM"/>
|
||||
</data>
|
||||
<data name="image">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="pen">
|
||||
<attribute name="color" type="hex" value="ff3333cc"/>
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
<attribute name="fill" type="int" value="0"/>
|
||||
<attribute name="fillAlpha" type="int" value="128"/>
|
||||
<attribute name="size" type="string" value="MEDIUM"/>
|
||||
<attribute name="style" type="string" value="plain"/>
|
||||
</data>
|
||||
<data name="playObject">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectMultiLayerRect">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectMultiLayerRegion">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectObject">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectPdfTextLinear">
|
||||
<attribute name="color" type="hex" value="ff000000"/>
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectPdfTextRect">
|
||||
<attribute name="color" type="hex" value="ff000000"/>
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectRect">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectRegion">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="showFloatingToolbox">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="text">
|
||||
<attribute name="color" type="hex" value="ff000000"/>
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="verticalSpace">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
</data>
|
||||
<data name="touch">
|
||||
<attribute name="cmdDisable" type="string" value=""/>
|
||||
<attribute name="cmdEnable" type="string" value=""/>
|
||||
<attribute name="disableTouch" type="boolean" value="false"/>
|
||||
<attribute name="method" type="string" value="auto"/>
|
||||
<attribute name="timeout" type="int" value="1000"/>
|
||||
</data>
|
||||
</settings>
|
||||
@@ -183,8 +183,12 @@ set -o ignoreeof # Stop CTRL-D from quitting
|
||||
# Load syntax highlighting; should be last.
|
||||
source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh 2>/dev/null
|
||||
|
||||
. "$HOME/.local/share/../bin/env"
|
||||
|
||||
eval "$(zoxide init --cmd cd zsh)"
|
||||
|
||||
eval "$(try init ~/src/tries)"
|
||||
|
||||
eval "$(direnv hook zsh)"
|
||||
|
||||
[ -f ~/.cache/wal/sequences ] && \cat ~/.cache/wal/sequences
|
||||
|
||||
[ -f ~/.cache/wal/colors-tty.sh ] && source ~/.cache/wal/colors-tty.sh
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script will compile or run another finishing operation on a document. I
|
||||
# have this script run via vim.
|
||||
#
|
||||
# Compiles .tex. groff (.mom, .ms), .rmd, .md, .org. Opens .sent files as sent
|
||||
# presentations. Runs scripts based on extention or shebang.
|
||||
#
|
||||
# Note that .tex files which you wish to compile with XeLaTeX should have the
|
||||
# string "xelatex" somewhere in a comment/command in the first 5 lines.
|
||||
|
||||
file=$(readlink -f "$1")
|
||||
dir=${file%/*}
|
||||
base="${file%.*}"
|
||||
ext="${file##*.}"
|
||||
|
||||
cd "$dir" || exit 1
|
||||
|
||||
textype() { \
|
||||
command="pdflatex"
|
||||
( head -n5 "$file" | grep -qi 'xelatex' ) && command="xelatex"
|
||||
$command --output-directory="$dir" "$base" &&
|
||||
grep -qi addbibresource "$file" &&
|
||||
biber --input-directory "$dir" "$base" &&
|
||||
$command --output-directory="$dir" "$base" &&
|
||||
$command --output-directory="$dir" "$base"
|
||||
}
|
||||
|
||||
case "$ext" in
|
||||
# Try to keep these cases in alphabetical order.
|
||||
[0-9]) preconv "$file" | refer -PS -e | groff -mandoc -T pdf > "$base".pdf ;;
|
||||
c) cc "$file" -o "$base" && "$base" ;;
|
||||
cpp) g++ "$file" -o "$base" && "$base" ;;
|
||||
cs) mcs "$file" && mono "$base".exe ;;
|
||||
go) go run "$file" ;;
|
||||
h) sudo make install ;;
|
||||
java) javac -d classes "$file" && java -cp classes "${1%.*}" ;;
|
||||
m) octave "$file" ;;
|
||||
md) if [ -x "$(command -v lowdown)" ]; then
|
||||
lowdown -d nointem -e super "$file" -Tms | groff -mpdfmark -ms -kept > "$base".pdf
|
||||
elif [ -x "$(command -v groffdown)" ]; then
|
||||
groffdown -i "$file" | groff > "$base.pdf"
|
||||
else
|
||||
pandoc -t ms --highlight-style=kate -s -o "$base".pdf "$file"
|
||||
fi ; ;;
|
||||
mom) preconv "$file" | refer -PS -e | groff -mom -kept -T pdf > "$base".pdf ;;
|
||||
ms) preconv "$file" | refer -PS -e | groff -me -ms -kept -T pdf > "$base".pdf ;;
|
||||
org) emacs "$file" --batch -u "$USER" -f org-latex-export-to-pdf ;;
|
||||
py) python "$file" ;;
|
||||
[rR]md) Rscript -e "rmarkdown::render('$file', quiet=TRUE)" ;;
|
||||
rs) cargo build ;;
|
||||
sass) sassc -a "$file" "$base.css" ;;
|
||||
scad) openscad -o "$base".stl "$file" ;;
|
||||
sent) setsid -f sent "$file" 2>/dev/null ;;
|
||||
tex) textype "$file" ;;
|
||||
*) head -n1 "$file" | grep "^#!/" | sed "s/^#!//" | xargs -r -I % "$file" ;;
|
||||
esac
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Syncs repositories and downloads updates, meant to be run as a cronjob.
|
||||
|
||||
notify-send " Repository Sync" "Checking for package updates..."
|
||||
|
||||
sudo yay -Syyuw --noconfirm || notify-send "Error downloading updates.
|
||||
Check your internet connection, if pacman is already running, or run update manually to see errors."
|
||||
pkill -RTMIN+8 "${STATUSBAR:-dwmblocks}"
|
||||
|
||||
if pacman -Qu | grep -v "\[ignored\]"
|
||||
then
|
||||
notify-send " Repository Sync" "Updates available. Click statusbar icon () for update."
|
||||
else
|
||||
notify-send " Repository Sync" "Sync complete. No new packages for update."
|
||||
fi
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Toggles all cronjobs off/on.
|
||||
# Stores disabled crontabs in ~/.consaved until restored.
|
||||
|
||||
([ -f "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved ] && crontab - < "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && rm "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && notify-send "🕓 Cronjobs re-enabled.") || ( crontab -l > "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && crontab -r && notify-send "🕓 Cronjobs saved and disabled.")
|
||||
@@ -1,15 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Set as a cron job to check for new RSS entries for newsboat.
|
||||
# If newsboat is open, sends it an "R" key to refresh.
|
||||
|
||||
/usr/bin/notify-send "📰 Updating RSS feeds..."
|
||||
|
||||
pgrep -f newsboat$ && /usr/bin/xdotool key --window "$(/usr/bin/xdotool search --name newsboat)" R && exit
|
||||
|
||||
echo > /tmp/newsupdate
|
||||
pkill -RTMIN+6 "${STATUSBAR:-dwmblocks}"
|
||||
/usr/bin/newsboat -x reload
|
||||
rm -f /tmp/newsupdate
|
||||
pkill -RTMIN+6 "${STATUSBAR:-dwmblocks}"
|
||||
/usr/bin/notify-send "📰 RSS feed update complete."
|
||||
@@ -1,21 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Feed this script a link and it will give dmenu
|
||||
# some choice programs to use to open it.
|
||||
feed="${1:-$(printf "%s" | dmenu -p 'Paste URL or file path')}"
|
||||
|
||||
case "$(printf "Copy URL\\nsxiv\\nsetbg\\nPDF\\nbrowser\\nlynx\\nvim\\nmpv\\nmpv loop\\nmpv float\\nqueue download\\nqueue yt-dl\\nqueue yt-dl audio" | dmenu -i -p "Open it with?")" in
|
||||
"copy url") echo "$feed" | xclip -selection clipboard ;;
|
||||
mpv) setsid -f mpv -quiet "$feed" >/dev/null 2>&1 ;;
|
||||
"mpv loop") setsid -f mpv -quiet --loop "$feed" >/dev/null 2>&1 ;;
|
||||
"mpv float") setsid -f "$TERMINAL" -e mpv --geometry=+0-0 --autofit=30% --title="mpvfloat" "$feed" >/dev/null 2>&1 ;;
|
||||
"queue yt-dl") qndl "$feed" >/dev/null 2>&1 ;;
|
||||
"queue yt-dl audio") qndl "$feed" 'youtube-dl --add-metadata -icx -f bestaudio/best' >/dev/null 2>&1 ;;
|
||||
"queue download") qndl "$feed" 'curl -LO' >/dev/null 2>&1 ;;
|
||||
PDF) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s/.*\///;s/%20/ /g")" && zathura "/tmp/$(echo "$feed" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 ;;
|
||||
sxiv) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s/.*\///;s/%20/ /g")" && sxiv -a "/tmp/$(echo "$feed" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 ;;
|
||||
vim) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s/.*\///;s/%20/ /g")" && setsid -f "$TERMINAL" -e "$EDITOR" "/tmp/$(echo "$feed" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 ;;
|
||||
setbg) curl -L "$feed" > $XDG_CACHE_HOME/pic ; xwallpaper --zoom $XDG_CACHE_HOME/pic >/dev/null 2>&1 ;;
|
||||
browser) setsid -f "$BROWSER" "$feed" >/dev/null 2>&1 ;;
|
||||
lynx) lynx "$feed" >/dev/null 2>&1 ;;
|
||||
esac
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
files="$(find -L "$HOME/Tower/Library" -name '*.pdf' -or -name '*.epub')"
|
||||
|
||||
options=$(echo "$files" | xargs --delimiter="\n" basename -a)
|
||||
|
||||
chosen=$(echo "$options" | dmenu -i -ix -c -l 30)
|
||||
|
||||
[ -z "$chosen" ] && exit
|
||||
|
||||
line="$(($chosen + 1))"
|
||||
|
||||
file="$(echo "$files" | sed "${line}q;d")"
|
||||
|
||||
zathura "$file"
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Gives a dmenu prompt to mount unmounted drives and Android phones. If
|
||||
# they're in /etc/fstab, they'll be mounted automatically. Otherwise, you'll
|
||||
# be prompted to give a mountpoint from already existsing directories. If you
|
||||
# input a novel directory, it will prompt you to create that directory.
|
||||
|
||||
getmount() { \
|
||||
[ -z "$chosen" ] && exit 1
|
||||
# shellcheck disable=SC2086
|
||||
mp="$(find $1 2>/dev/null | dmenu -i -p "Type in mount point.")" || exit 1
|
||||
[ "$mp" = "" ] && exit 1
|
||||
if [ ! -d "$mp" ]; then
|
||||
mkdiryn=$(printf "No\\nYes" | dmenu -i -p "$mp does not exist. Create it?") || exit 1
|
||||
[ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp")
|
||||
fi
|
||||
}
|
||||
|
||||
mountusb() { \
|
||||
chosen="$(echo "$usbdrives" | dmenu -i -p "Mount which drive?")" || exit 1
|
||||
chosen="$(echo "$chosen" | awk '{print $1}')"
|
||||
sudo -A mount "$chosen" 2>/dev/null && notify-send "💻 USB mounting" "$chosen mounted." && exit 0
|
||||
alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}')
|
||||
getmount "/mnt /media /mount /home -maxdepth 5 -type d $alreadymounted"
|
||||
partitiontype="$(lsblk -no "fstype" "$chosen")"
|
||||
case "$partitiontype" in
|
||||
"vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;;
|
||||
"exfat") sudo -A mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)";;
|
||||
*) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";;
|
||||
esac
|
||||
notify-send "💻 USB mounting" "$chosen mounted to $mp."
|
||||
}
|
||||
|
||||
mountandroid() { \
|
||||
chosen="$(echo "$anddrives" | dmenu -i -p "Which Android device?")" || exit 1
|
||||
chosen="$(echo "$chosen" | cut -d : -f 1)"
|
||||
getmount "$HOME -maxdepth 3 -type d"
|
||||
simple-mtpfs --device "$chosen" "$mp"
|
||||
echo "OK" | dmenu -i -p "Tap Allow on your phone if it asks for permission and then press enter" || exit 1
|
||||
simple-mtpfs --device "$chosen" "$mp"
|
||||
notify-send "🤖 Android Mounting" "Android device mounted to $mp."
|
||||
}
|
||||
|
||||
asktype() { \
|
||||
choice="$(printf "USB\\nAndroid" | dmenu -i -p "Mount a USB drive or Android device?")" || exit 1
|
||||
case $choice in
|
||||
USB) mountusb ;;
|
||||
Android) mountandroid ;;
|
||||
esac
|
||||
}
|
||||
|
||||
anddrives=$(simple-mtpfs -l 2>/dev/null)
|
||||
usbdrives="$(lsblk -rpo "name,type,size,mountpoint" | grep 'part\|rom' | awk '$4==""{printf "%s (%s)\n",$1,$3}')"
|
||||
|
||||
if [ -z "$usbdrives" ]; then
|
||||
[ -z "$anddrives" ] && echo "No USB drive or Android device detected" && exit
|
||||
echo "Android device(s) detected."
|
||||
mountandroid
|
||||
else
|
||||
if [ -z "$anddrives" ]; then
|
||||
echo "USB drive(s) detected."
|
||||
mountusb
|
||||
else
|
||||
echo "Mountable USB drive(s) and Android device(s) detected."
|
||||
asktype
|
||||
fi
|
||||
fi
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script is the SUDO_ASKPASS variable, meaning that it will be used as a
|
||||
# password prompt if needed.
|
||||
|
||||
dmenu -P -p "$1" <&- && echo
|
||||
@@ -1,44 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# A dmenu prompt to unmount drives.
|
||||
# Provides you with mounted partitions, select one to unmount.
|
||||
# Drives mounted at /, /boot and /home will not be options to unmount.
|
||||
|
||||
unmountusb() {
|
||||
[ -z "$drives" ] && exit
|
||||
chosen="$(echo "$drives" | dmenu -i -p "Unmount which drive?")" || exit 1
|
||||
chosen="$(echo "$chosen" | awk '{print $1}')"
|
||||
[ -z "$chosen" ] && exit
|
||||
sudo -A umount "$chosen" && notify-send "💻 USB unmounting" "$chosen unmounted."
|
||||
}
|
||||
|
||||
unmountandroid() { \
|
||||
chosen="$(awk '/simple-mtpfs/ {print $2}' /etc/mtab | dmenu -i -p "Unmount which device?")" || exit 1
|
||||
[ -z "$chosen" ] && exit
|
||||
sudo -A umount -l "$chosen" && notify-send "🤖 Android unmounting" "$chosen unmounted."
|
||||
}
|
||||
|
||||
asktype() { \
|
||||
choice="$(printf "USB\\nAndroid" | dmenu -i -p "Unmount a USB drive or Android device?")" || exit 1
|
||||
case "$choice" in
|
||||
USB) unmountusb ;;
|
||||
Android) unmountandroid ;;
|
||||
esac
|
||||
}
|
||||
|
||||
drives=$(lsblk -nrpo "name,type,size,mountpoint" | awk '$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "%s (%s)\n",$4,$3}')
|
||||
|
||||
if ! grep simple-mtpfs /etc/mtab; then
|
||||
[ -z "$drives" ] && echo "No drives to unmount." && exit
|
||||
echo "Unmountable USB drive detected."
|
||||
unmountusb
|
||||
else
|
||||
if [ -z "$drives" ]
|
||||
then
|
||||
echo "Unmountable Android device detected."
|
||||
unmountandroid
|
||||
else
|
||||
echo "Unmountable USB drive(s) and Android device(s) detected."
|
||||
asktype
|
||||
fi
|
||||
fi
|
||||
@@ -1,18 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# The famous "get a menu of emojis to copy" script.
|
||||
|
||||
# Get user selection via dmenu from emoji file.
|
||||
chosen=$(cut -d ';' -f1 ~/.local/share/emojis | dmenu -i -l 30 | sed "s/ .*//")
|
||||
|
||||
# Exit if none chosen.
|
||||
[ -z "$chosen" ] && exit
|
||||
|
||||
# If you run this command with an argument, it will automatically insert the
|
||||
# character. Otherwise, show a message that the emoji has been copied.
|
||||
if [ -n "$1" ]; then
|
||||
xdotool type "$chosen"
|
||||
else
|
||||
printf "$chosen" | xclip -selection clipboard
|
||||
notify-send "'$chosen' copied to clipboard." &
|
||||
fi
|
||||
@@ -1,24 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "starting"
|
||||
echo "$1"
|
||||
|
||||
file="${1:-$HOME/Downloads}"
|
||||
|
||||
[ -d "$file" ] && file="$file/$(ls -Art "$file" | tail -n 1)"
|
||||
|
||||
echo "continuing"
|
||||
echo "$file"
|
||||
|
||||
case "$file" in
|
||||
*ergodox*.hex)
|
||||
wally-cli "$file" ;;
|
||||
# *png|*jpg|*jpe|*jpeg|*gif)
|
||||
# curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" && sxiv -a "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;;
|
||||
# *pdf|*cbz|*cbr)
|
||||
# curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" && zathura "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;;
|
||||
# *mp3|*flac|*opus|*mp3?source*)
|
||||
# qndl "$1" 'curl -LO' >/dev/null 2>&1 ;;
|
||||
# *)
|
||||
# [ -f "$1" ] && setsid -f "$TERMINAL" -e "$EDITOR" "$1" >/dev/null 2>&1 || setsid -f "$BROWSER" "$1" >/dev/null 2>&1
|
||||
esac
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/bin/sh
|
||||
# add binaries to PATH if they aren't added yet
|
||||
# affix colons on either side of $PATH to simplify matching
|
||||
case ":${PATH}:" in
|
||||
*:"$HOME/.local/share/../bin":*)
|
||||
;;
|
||||
*)
|
||||
# Prepending path in case a system-installed binary needs to be overridden
|
||||
export PATH="$HOME/.local/share/../bin:$PATH"
|
||||
;;
|
||||
esac
|
||||
@@ -1,45 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# A general, all-purpose extraction script. Not all extraction programs here
|
||||
# are installed by LARBS automatically.
|
||||
#
|
||||
# Default behavior: Extract archive into new directory
|
||||
# Behavior with `-c` option: Extract contents into current directory
|
||||
|
||||
while getopts "hc" o; do case "${o}" in
|
||||
c) extracthere="True" ;;
|
||||
*) printf "Options:\\n -c: Extract archive into current directory rather than a new one.\\n" && exit 1 ;;
|
||||
esac done
|
||||
|
||||
if [ -z "$extracthere" ]; then
|
||||
archive="$(readlink -f "$*")" &&
|
||||
directory="$(echo "$archive" | sed 's/\.[^\/.]*$//')" &&
|
||||
mkdir -p "$directory" &&
|
||||
cd "$directory" || exit 1
|
||||
else
|
||||
archive="$(readlink -f "$(echo "$*" | cut -d' ' -f2)" 2>/dev/null)"
|
||||
fi
|
||||
|
||||
[ -z "$archive" ] && printf "Give archive to extract as argument.\\n" && exit 1
|
||||
|
||||
if [ -f "$archive" ] ; then
|
||||
case "$archive" in
|
||||
*.tar.bz2|*.tbz2) tar xvjf "$archive" ;;
|
||||
*.tar.xz) tar -xf "$archive" ;;
|
||||
*.tar.gz|*.tgz) tar xvzf "$archive" ;;
|
||||
*.tar.zst) tar -I zstd -xf "$archive" ;;
|
||||
*.lzma) unlzma "$archive" ;;
|
||||
*.bz2) bunzip2 "$archive" ;;
|
||||
*.rar) unrar x -ad "$archive" ;;
|
||||
*.gz) gunzip "$archive" ;;
|
||||
*.tar) tar xvf "$archive" ;;
|
||||
*.zip) unzip "$archive" ;;
|
||||
*.Z) uncompress "$archive" ;;
|
||||
*.7z) 7z x "$archive" ;;
|
||||
*.xz) unxz "$archive" ;;
|
||||
*.exe) cabextract "$archive" ;;
|
||||
*) printf "extract: '%s' - unknown archive method\\n" "$archive" ;;
|
||||
esac
|
||||
else
|
||||
printf "File \"%s\" not found.\\n" "$archive"
|
||||
fi
|
||||
@@ -1,94 +0,0 @@
|
||||
const fs = require('fs');
|
||||
|
||||
const input = fs.readFileSync('./Chris S. Coaching Tracker - Weekly Tracker.csv', 'utf8');
|
||||
|
||||
const rows = [];
|
||||
|
||||
const week = {
|
||||
'Chest': null,
|
||||
'Right thigh': null,
|
||||
'Left thigh': null,
|
||||
'Waist': null,
|
||||
'Left biceps': null,
|
||||
'Right biceps': null,
|
||||
}
|
||||
|
||||
let year = 2023;
|
||||
|
||||
input.split("\n").forEach((line) => {
|
||||
if (line.includes(' 1 Jan')) {
|
||||
year++;
|
||||
}
|
||||
const map = {
|
||||
'R Arm': 'Right biceps',
|
||||
'L Arm': 'Left biceps',
|
||||
'Navel': 'Waist',
|
||||
'Chest': 'Chest',
|
||||
'R Leg': 'Right thigh',
|
||||
'L Leg': 'Left thigh',
|
||||
}
|
||||
for (let key in map) {
|
||||
const val = map[key];
|
||||
const match = line.match(new RegExp(`${key},([^,]+)`));
|
||||
if (match) {
|
||||
week[val] = (1*match[1]).toPrecision(3);
|
||||
}
|
||||
}
|
||||
if (line.startsWith('"Sun')) {
|
||||
const match = line.match(/^"(Sun[^"]+)\s*"/)[1];
|
||||
const date = new Date(`${match} UTC`);
|
||||
date.setFullYear(year);
|
||||
|
||||
for (let key in week) {
|
||||
const val = week[key];
|
||||
rows.push(`BODYMEASURE,${date.toJSON().split('T')[0]},${key},${val},cm`);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
['Weight', 'Weight(1)', 'Weight(2)', 'Weight(3)'].forEach((name) => {
|
||||
const weightInput = fs.readFileSync(`./${name}.csv`, 'utf8').split("\n");
|
||||
|
||||
weightInput.shift();
|
||||
for (let i = 0; i < weightInput.length;) {
|
||||
if (!weightInput[i] || !weightInput[i + 1]) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
const date = new Date(`${weightInput[i].substring(2, weightInput[i].length - 2)} UTC`);
|
||||
const [time, weight, change, bmi, fat, muscle, bone, water] = weightInput[i + 1].split(',')
|
||||
|
||||
if (weight && weight !== '--') {
|
||||
const [kg, units] = weight.split(' ');
|
||||
rows.push(`BODYMEASURE,${date.toJSON().split('T')[0]},Weight,${kg},${units}`);
|
||||
}
|
||||
|
||||
if (fat && fat !== '--') {
|
||||
const [perc, units] = fat.split(' ');
|
||||
rows.push(`BODYMEASURE,${date.toJSON().split('T')[0]},Fat,${perc},${units}`);
|
||||
}
|
||||
|
||||
if (muscle && muscle !== '--' && weight && weight !== '--') {
|
||||
const [kg, units] = muscle.split(' ');
|
||||
const weightKg = weight.split(' ')[0];
|
||||
const perc = (100 * kg / weightKg).toPrecision(3);
|
||||
rows.push(`BODYMEASURE,${date.toJSON().split('T')[0]},Muscles,${perc},%`);
|
||||
}
|
||||
|
||||
if (water && water !== '--') {
|
||||
const [perc, units] = water.split(' ');
|
||||
rows.push(`BODYMEASURE,${date.toJSON().split('T')[0]},Water,${perc},${units}`);
|
||||
}
|
||||
|
||||
i++;
|
||||
while (weightInput[i] && weightInput[i][0] !== '"') {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
rows.sort();
|
||||
|
||||
rows.unshift('TABLE,DATE,BODYPART_NAME,MEASURE,UNIT');
|
||||
|
||||
fs.writeFileSync('./fnfImport.csv', rows.join("\n"));
|
||||
@@ -1,15 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Creating development directories"
|
||||
|
||||
mkdir "$HOME/Code"
|
||||
mkdir "$HOME/Code/DevOps" # For server and computer admin
|
||||
mkdir "$HOME/Code/FSharp"
|
||||
mkdir "$HOME/Code/JavaScript"
|
||||
mkdir "$HOME/Code/Scala"
|
||||
mkdir "$HOME/Code/Rust"
|
||||
mkdir "$HOME/Code/PHP"
|
||||
mkdir "$HOME/Code/Tutorials" # For doing tutorials/courses
|
||||
mkdir "$HOME/Code/Sites" # Websites in any language
|
||||
mkdir "$HOME/Code/MobileApps" # Mobile apps in any language
|
||||
mkdir "$HOME/Code/Tests" # Small test files/scripts
|
||||
@@ -1,9 +0,0 @@
|
||||
#! /bin/zsh
|
||||
|
||||
enpass-cli -vault="$HOME/.local/share/Enpass/Enpass/Vaults/primary" -sort copy "Firefox"
|
||||
|
||||
firefox "https://accounts.firefox.com/signin?action=email&service=sync" &
|
||||
|
||||
read -s -k $'?Press enter when you have synced Firefox...\n'
|
||||
|
||||
echo "" | wl-copy
|
||||
@@ -1,7 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
"$HOME/.local/bin/install/password.sh"
|
||||
"$HOME/.local/bin/install/ssh.sh"
|
||||
"$HOME/.local/bin/install/dev.sh"
|
||||
"$HOME/.local/bin/install/firefox.sh"
|
||||
"$HOME/.local/bin/install/nextcloud.sh"
|
||||
@@ -1,12 +0,0 @@
|
||||
#! /bin/zsh
|
||||
|
||||
mkdir -p "$HOME/Tower"
|
||||
|
||||
nextcloud &
|
||||
|
||||
enpasscli -vault="$HOME/.local/share/Enpass/Enpass/Vaults/primary" -sort copy "Scarif: Tower"
|
||||
|
||||
read -s -k $'?Press enter when you have synced Nextcloud... \n'
|
||||
|
||||
wl-copy --clear
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
doas tee /etc/udev/rules/90-backlight.rules <<HRD
|
||||
SUBSYSTEM=="backlight", ACTION=="add" \
|
||||
RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness", \
|
||||
RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
|
||||
HRD
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
sudo pacman --noconfirm --needed -S python-pyqt5 hplip nss-mdns
|
||||
|
||||
sudo sed -i 's/hosts: files mymachines myhostname resolve [!UNAVAIL=return] dns/hosts: files mymachines myhostname mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns/' /etc/nsswitch.conf
|
||||
|
||||
sudo systemctl enable --now avahi-daemon
|
||||
|
||||
hp-setup -i 192.168.2.77
|
||||
|
||||
lpoptions -d DeskJet_3700
|
||||
|
||||
lpoptions -o PageSize=A4
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
doas tee /etc/NetworkManager/conf.d <<HRD
|
||||
[main]
|
||||
dhcpd=dhclient
|
||||
HRD
|
||||
|
||||
doas tee /etc/iwd/main.conf <<HRD
|
||||
[Network]
|
||||
EnableNetworkConfiguration=True
|
||||
EnableIPv6=True
|
||||
HRD
|
||||
|
||||
doas systemctl enable --now iwd
|
||||
doas systemctl enable --now NetworkManager
|
||||
|
||||
nmtui
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
export MASTERPW=$(gum input --header="Master password" --password)
|
||||
|
||||
Enpass &
|
||||
|
||||
echo "$MASTERPW" | wl-copy
|
||||
|
||||
read -n 1 -r -s -p $'Press enter when you have synced enpass...\n'
|
||||
|
||||
wl-copy --clear
|
||||
|
||||
CHECKPW=$(enpass-cli -vault="$HOME/.local/share/Enpass/Enpass/Vaults/primary" -sort list 2>&1)
|
||||
|
||||
while [[ "$CHECKPW" == *level=fatal* ]]; do
|
||||
export MASTERPW=$(zenity --password)
|
||||
CHECKPW=$(enpass-cli -vault="$HOME/.local/share/Enpass/Enpass/Vaults/primary" -sort list)
|
||||
done
|
||||
|
||||
echo "Password set successfuly"
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
sudo systemctl enable --now expressvpn.service
|
||||
|
||||
VPN=$(enpasscli -vault="$HOME/Documents/Enpass/Vaults/primary" -sort show "ExpressVPN Activation Code" 2>&1)
|
||||
VPNPW=$(echo "$LABS" | grep -Po "(?<=pass : ).+(?=\")")
|
||||
|
||||
echo "$VPNPW" | xclip -selection clipboard -i
|
||||
|
||||
expressvpn activate
|
||||
|
||||
expressvpn autoconnect true
|
||||
|
||||
expressvpn connect smart
|
||||
|
||||
echo "" | xclip -selection clipboard -i
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Feed script a url or file location.
|
||||
# If an image, it will view in sxiv,
|
||||
# if a video or gif, it will view in mpv
|
||||
# if a music file or pdf, it will download,
|
||||
# otherwise it opens link in browser.
|
||||
|
||||
# If no url given. Opens browser. For using script as $BROWSER.
|
||||
[ -z "$1" ] && { "$BROWSER"; exit; }
|
||||
|
||||
case "$1" in
|
||||
*mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtu.be*|*hooktube.com*|*bitchute.com*|*videos.lukesmith.xyz*)
|
||||
setsid -f mpv -quiet "$1" >/dev/null 2>&1 ;;
|
||||
*png|*jpg|*jpe|*jpeg|*gif)
|
||||
curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" && sxiv -a "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;;
|
||||
*pdf|*cbz|*cbr)
|
||||
curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" && zathura "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;;
|
||||
*mp3|*flac|*opus|*mp3?source*)
|
||||
qndl "$1" 'curl -LO' >/dev/null 2>&1 ;;
|
||||
*)
|
||||
[ -f "$1" ] && setsid -f "$TERMINAL" -e "$EDITOR" "$1" >/dev/null 2>&1 || setsid -f "$BROWSER" "$1" >/dev/null 2>&1
|
||||
esac
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# opout: "open output": A general handler for opening a file's intended output,
|
||||
# usually the pdf of a compiled document. I find this useful especially
|
||||
# running from vim.
|
||||
|
||||
basename="$(echo "${*}" | sed 's/\.[^\/.]*$//')"
|
||||
|
||||
case "${*}" in
|
||||
*.tex|*.m[dse]|*.[rR]md|*.mom|*.[0-9]) setsid -f xdg-open "$basename".pdf >/dev/null 2>&1 ;;
|
||||
*.html) setsid -f "$BROWSER" "$basename".html >/dev/null 2>&1 ;;
|
||||
*.sent) setsid -f sent "$1" >/dev/null 2>&1 ;;
|
||||
esac
|
||||
@@ -1,44 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script does the following:
|
||||
# Run by itself, set the wallpaper (at X start).
|
||||
# If given a file, set that as the new wallpaper.
|
||||
# If given a directory, choose random file in it.
|
||||
# If wal is installed, also generates a colorscheme.
|
||||
|
||||
# Location of link to wallpaper link.
|
||||
bgloc="${XDG_DATA_HOME:-$HOME/.local/share/}/bg"
|
||||
|
||||
trueloc="$(readlink -f "$1")" &&
|
||||
case "$(file --mime-type -b "$trueloc")" in
|
||||
image/* ) ln -sf "$(readlink -f "$1")" "$bgloc" ;;
|
||||
inode/directory ) trueloc=$(find "$trueloc" -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1) && ln -sf "$trueloc" "$bgloc" ;;
|
||||
*) notify-send "Error" "Not a valid image." ; exit 1;;
|
||||
esac
|
||||
|
||||
[ -z "$trueloc" ] && trueloc="$(readlink -f "$bgloc")"
|
||||
|
||||
# If pywal is installed, use it.
|
||||
# command -v wal >/dev/null 2>&1 &&
|
||||
# wal -i "$trueloc" -n -o "${XDG_CONFIG_HOME:-$HOME/.config}/wal/postrun" >/dev/null 2>&1 &&
|
||||
# dwmc xrdb
|
||||
|
||||
xwallpaper --no-randr --zoom "$bgloc"
|
||||
|
||||
parent_dir=$(dirname "$trueloc")
|
||||
filename=$(basename "$trueloc")
|
||||
filename_without_extension=${filename%.*}
|
||||
split_dir="${parent_dir}_split"
|
||||
left_image="${split_dir}/${filename_without_extension}_left.jpg"
|
||||
right_image="${split_dir}/${filename_without_extension}_right.jpg"
|
||||
|
||||
# Check if left and right images exist
|
||||
if [ -e "$left_image" ] && [ -e "$right_image" ]; then
|
||||
kwriteconfig5 --file "$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc" \
|
||||
--group 'Containments' --group '127' --group 'Wallpaper' --group 'org.kde.image' \
|
||||
--group 'General' --key 'Image' "$left_image"
|
||||
|
||||
kwriteconfig5 --file "$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc" \
|
||||
--group 'Containments' --group '94' --group 'Wallpaper' --group 'org.kde.image' \
|
||||
--group 'General' --key 'Image' "$right_image"
|
||||
fi
|
||||
@@ -1,12 +0,0 @@
|
||||
sudo tee /etc/modprobes.d/r8169.conf <<HRD
|
||||
# Do not load the r819 realtek module to force it to use r8168 instead for
|
||||
# better reliability
|
||||
# https://wiki.archlinux.org/title/Network_configuration/Ethernet#Troubleshooting
|
||||
blacklist r8169
|
||||
HRD
|
||||
|
||||
# Rebuild kernel modules
|
||||
sudo mkinitcpio -p linux
|
||||
|
||||
echo "Please restart your computer to update kernel modules"
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
export MASTERPW=$(zenity --password)
|
||||
|
||||
echo "https://tower.scarif.space" | wl-copy
|
||||
|
||||
enpass &
|
||||
|
||||
echo "$MASTERPW" | wl-copy
|
||||
|
||||
read -n 1 -r -s -p $'Press enter when you have synced enpass...\n'
|
||||
|
||||
dwmc toggleview 0
|
||||
|
||||
echo "" | wl-copy
|
||||
|
||||
CHECKPW=$(enpasscli -vault="$HOME/Documents/Enpass/Vaults/primary" -sort list 2>&1)
|
||||
|
||||
while [[ "$CHECKPW" == *level=fatal* ]]; do
|
||||
export MASTERPW=$(zenity --password)
|
||||
CHECKPW=$(enpasscli -vault="$HOME/Documents/Enpass/Vaults/primary" -sort list)
|
||||
done
|
||||
|
||||
echo "Password set successfuly"
|
||||
|
||||
setupssh
|
||||
setupdev
|
||||
setupfirefox
|
||||
setupnextcloud
|
||||
setupobsidian
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user