initial commit
This commit is contained in:
commit
97f929cd1f
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
result
|
||||||
|
*/result
|
12
README.md
Normal file
12
README.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# Evie's NixFiles
|
||||||
|
A Nix flake for my system configuration - WIP.
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
- `./evelyne` - A folder for my home-manager configs (aka my user)
|
||||||
|
- `./evelyne/common` - Home configuration available on all systems
|
||||||
|
- `./systems` - A folder for my system-wide configs
|
||||||
|
- `./systems/pogmachine` - System configuration for my desktop (PogMachine)
|
||||||
|
- `overlays.nix` - A file for my nixpkgs overlays
|
||||||
|
|
||||||
|
## Many thanks
|
||||||
|
- ❤️ Thanks to @SpyHoodle who helped me make this config
|
15
evelyne/common/audio.nix
Normal file
15
evelyne/common/audio.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
pulsemixer # TUI sound mixer
|
||||||
|
pamixer # CLI sound mixer
|
||||||
|
playerctl # Manages media players
|
||||||
|
cava # Music visualiser
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/ytdlp-music" = {
|
||||||
|
source = ./audio/ytdlp-music.sh;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
}
|
6
evelyne/common/audio/ytdlp-music.sh
Executable file
6
evelyne/common/audio/ytdlp-music.sh
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
echo "Name:" && read name
|
||||||
|
echo "URL:" && read url
|
||||||
|
|
||||||
|
yt-dlp -x --no-playlist --embed-thumbnail --no-embed-metadata --audio-quality 0 --audio-format flac -o "$name" "$url"
|
12
evelyne/common/bosskey.nix
Normal file
12
evelyne/common/bosskey.nix
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
slock
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/bosskey" = {
|
||||||
|
source = ./bosskey/bosskey.sh;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
}
|
50
evelyne/common/bosskey/bosskey.sh
Executable file
50
evelyne/common/bosskey/bosskey.sh
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# ____ _
|
||||||
|
# | __ ) ___ ___ ___| | _____ _ _
|
||||||
|
# | _ \ / _ \/ __/ __| |/ / _ \ | | |
|
||||||
|
# | |_) | (_) \__ \__ \ < __/ |_| |
|
||||||
|
# |____/ \___/|___/___/_|\_\___|\__, |
|
||||||
|
# |___/ v1.2
|
||||||
|
# GitHub: https://github.com/SpyHoodle/bosskey
|
||||||
|
|
||||||
|
|
||||||
|
function refresh_statusbar() {
|
||||||
|
case $1 in
|
||||||
|
dwmblocks)
|
||||||
|
# Refresh dwmblocks as it only updates when told so
|
||||||
|
kill -35 $(pidof dwmblocks)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
while getopts "lmpur" options; do
|
||||||
|
case $options in
|
||||||
|
m)
|
||||||
|
# Mute the volume
|
||||||
|
pamixer --mute
|
||||||
|
;;
|
||||||
|
|
||||||
|
p)
|
||||||
|
# Pause any playing media
|
||||||
|
playerctl pause
|
||||||
|
;;
|
||||||
|
|
||||||
|
l)
|
||||||
|
# Lock the screen using slock(1)
|
||||||
|
slock
|
||||||
|
;;
|
||||||
|
|
||||||
|
u)
|
||||||
|
# Unmute the audio
|
||||||
|
pamixer --unmute
|
||||||
|
;;
|
||||||
|
|
||||||
|
r)
|
||||||
|
# Refresh a dwmblocks status bar
|
||||||
|
refresh_statusbar "dwmblocks"
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
done
|
9
evelyne/common/browser.nix
Normal file
9
evelyne/common/browser.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
librewolf
|
||||||
|
amfora
|
||||||
|
lynx
|
||||||
|
];
|
||||||
|
}
|
13
evelyne/common/btop.nix
Normal file
13
evelyne/common/btop.nix
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.btop = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
color_theme = "TTY";
|
||||||
|
theme_background = false;
|
||||||
|
truecolor = true;
|
||||||
|
clock_format = "| /user@/host | /uptime | %y/%m/%d | %H:%M:%S |";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
7
evelyne/common/calculator.nix
Normal file
7
evelyne/common/calculator.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
nodePackages.insect
|
||||||
|
];
|
||||||
|
}
|
29
evelyne/common/chromium.nix
Normal file
29
evelyne/common/chromium.nix
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.chromium = {
|
||||||
|
enable = true;
|
||||||
|
commandLineArgs = [
|
||||||
|
"--enable-logging=stderr"
|
||||||
|
"--ignore-gpu-blocklist"
|
||||||
|
];
|
||||||
|
extensions = [
|
||||||
|
# Dark Reader
|
||||||
|
{ id = "eimadpbcbfnmbkopoojfekhnkhdbieeh"; }
|
||||||
|
# uBlock Origin
|
||||||
|
{ id = "cjpalhdlnbpafiamejdnhcphjbkeiagm"; }
|
||||||
|
# I still don't care about cookies
|
||||||
|
{ id = "edibdbjcniadpccecjdfdjjppcpchdlm"; }
|
||||||
|
# NoScript
|
||||||
|
{ id = "doojmbjmlfjjnbmnoijecmcbfeoakpjm"; }
|
||||||
|
# Reddit Enhancement Suite
|
||||||
|
{ id = "kbmfpngjjgdllneeigpgjifpgocmfgmb"; }
|
||||||
|
# Old Reddit Redirect
|
||||||
|
{ id = "dneaehbmnbhcippjikoajpoabadpodje"; }
|
||||||
|
# Return Youtube Dislike
|
||||||
|
{ id = "gebbhagfogifgggkldgodflihgfeippi"; }
|
||||||
|
# Vimium
|
||||||
|
{ id = "dbepggeogbaibhgnhhndojpepiihcmeb"; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
8
evelyne/common/code.nix
Normal file
8
evelyne/common/code.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
python3Full # Python
|
||||||
|
go # Go
|
||||||
|
];
|
||||||
|
}
|
16
evelyne/common/dmenu.nix
Normal file
16
evelyne/common/dmenu.nix
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
dmenu
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/dmenu" = {
|
||||||
|
source = ./dmenu;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionPath = [
|
||||||
|
"$HOME/.local/bin/dmenu"
|
||||||
|
];
|
||||||
|
}
|
317
evelyne/common/dmenu/dmenu-bluetooth
Executable file
317
evelyne/common/dmenu/dmenu-bluetooth
Executable file
@ -0,0 +1,317 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# _ _ _ _ _ _
|
||||||
|
# __| |_ __ ___ ___ _ __ _ _ | |__ | |_ _ ___| |_ ___ ___ | |_ | |__
|
||||||
|
# / _` | '_ ` _ \ / _ \ '_ \| | | |_____| '_ \| | | | |/ _ \ __/ _ \ / _ \| __|| '_ \
|
||||||
|
# | (_| | | | | | | __/ | | | |_| |_____| |_) | | |_| | __/ || (_) | (_) | |_ | | | |
|
||||||
|
# \__,_|_| |_| |_|\___|_| |_|\__,_| |_.__/|_|\__,_|\___|\__\___/ \___/ \__||_| |_|
|
||||||
|
#
|
||||||
|
# Author: Nick Clyde (clydedroid)
|
||||||
|
# dmenu support by: Layerex
|
||||||
|
#
|
||||||
|
# A script that generates a dmenu menu that uses bluetoothctl to
|
||||||
|
# connect to bluetooth devices and display status info.
|
||||||
|
#
|
||||||
|
# Inspired by networkmanager-dmenu (https://github.com/firecat53/networkmanager-dmenu)
|
||||||
|
# Thanks to x70b1 (https://github.com/polybar/polybar-scripts/tree/master/polybar-scripts/system-bluetooth-bluetoothctl)
|
||||||
|
#
|
||||||
|
# Depends on:
|
||||||
|
# Arch repositories: dmenu, bluez-utils (contains bluetoothctl)
|
||||||
|
|
||||||
|
# Constants
|
||||||
|
divider="---------"
|
||||||
|
goback="Back"
|
||||||
|
|
||||||
|
# Checks if bluetooth controller is powered on
|
||||||
|
power_on() {
|
||||||
|
if bluetoothctl show | grep -F -q "Powered: yes"; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Toggles power state
|
||||||
|
toggle_power() {
|
||||||
|
if power_on; then
|
||||||
|
bluetoothctl power off
|
||||||
|
show_menu
|
||||||
|
else
|
||||||
|
if rfkill list bluetooth | grep -F -q 'blocked: yes'; then
|
||||||
|
rfkill unblock bluetooth && sleep 3
|
||||||
|
fi
|
||||||
|
bluetoothctl power on
|
||||||
|
show_menu
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks if controller is scanning for new devices
|
||||||
|
scan_on() {
|
||||||
|
if bluetoothctl show | grep -F -q "Discovering: yes"; then
|
||||||
|
echo "Scan: on"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "Scan: off"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Toggles scanning state
|
||||||
|
toggle_scan() {
|
||||||
|
if scan_on; then
|
||||||
|
kill "$(pgrep -F -f "bluetoothctl scan on")"
|
||||||
|
bluetoothctl scan off
|
||||||
|
show_menu
|
||||||
|
else
|
||||||
|
bluetoothctl scan on &
|
||||||
|
echo "Scanning..."
|
||||||
|
sleep 5
|
||||||
|
show_menu
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks if controller is able to pair to devices
|
||||||
|
pairable_on() {
|
||||||
|
if bluetoothctl show | grep -F -q "Pairable: yes"; then
|
||||||
|
echo "Pairable: on"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "Pairable: off"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Toggles pairable state
|
||||||
|
toggle_pairable() {
|
||||||
|
if pairable_on; then
|
||||||
|
bluetoothctl pairable off
|
||||||
|
show_menu
|
||||||
|
else
|
||||||
|
bluetoothctl pairable on
|
||||||
|
show_menu
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks if controller is discoverable by other devices
|
||||||
|
discoverable_on() {
|
||||||
|
if bluetoothctl show | grep -F -q "Discoverable: yes"; then
|
||||||
|
echo "Discoverable: on"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "Discoverable: off"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Toggles discoverable state
|
||||||
|
toggle_discoverable() {
|
||||||
|
if discoverable_on; then
|
||||||
|
bluetoothctl discoverable off
|
||||||
|
show_menu
|
||||||
|
else
|
||||||
|
bluetoothctl discoverable on
|
||||||
|
show_menu
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks if a device is connected
|
||||||
|
device_connected() {
|
||||||
|
device_info=$(bluetoothctl info "$1")
|
||||||
|
if echo "$device_info" | grep -F -q "Connected: yes"; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Toggles device connection
|
||||||
|
toggle_connection() {
|
||||||
|
if device_connected "$1"; then
|
||||||
|
bluetoothctl disconnect "$1"
|
||||||
|
# device_menu "$device"
|
||||||
|
else
|
||||||
|
bluetoothctl connect "$1"
|
||||||
|
# device_menu "$device"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks if a device is paired
|
||||||
|
device_paired() {
|
||||||
|
device_info=$(bluetoothctl info "$1")
|
||||||
|
if echo "$device_info" | grep -F -q "Paired: yes"; then
|
||||||
|
echo "Paired: yes"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "Paired: no"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Toggles device paired state
|
||||||
|
toggle_paired() {
|
||||||
|
if device_paired "$1"; then
|
||||||
|
bluetoothctl remove "$1"
|
||||||
|
device_menu "$device"
|
||||||
|
else
|
||||||
|
bluetoothctl pair "$1"
|
||||||
|
device_menu "$device"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks if a device is trusted
|
||||||
|
device_trusted() {
|
||||||
|
device_info=$(bluetoothctl info "$1")
|
||||||
|
if echo "$device_info" | grep -F -q "Trusted: yes"; then
|
||||||
|
echo "Trusted: yes"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "Trusted: no"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Toggles device connection
|
||||||
|
toggle_trust() {
|
||||||
|
if device_trusted "$1"; then
|
||||||
|
bluetoothctl untrust "$1"
|
||||||
|
device_menu "$device"
|
||||||
|
else
|
||||||
|
bluetoothctl trust "$1"
|
||||||
|
device_menu "$device"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Prints a short string with the current bluetooth status
|
||||||
|
# Useful for status bars like polybar, etc.
|
||||||
|
print_status() {
|
||||||
|
if power_on; then
|
||||||
|
printf ''
|
||||||
|
|
||||||
|
mapfile -t paired_devices < <(bluetoothctl paired-devices | grep -F Device | cut -d ' ' -f 2)
|
||||||
|
counter=0
|
||||||
|
|
||||||
|
for device in "${paired_devices[@]}"; do
|
||||||
|
if device_connected "$device"; then
|
||||||
|
device_alias="$(bluetoothctl info "$device" | grep -F "Alias" | cut -d ' ' -f 2-)"
|
||||||
|
|
||||||
|
if [ $counter -gt 0 ]; then
|
||||||
|
printf ", %s" "$device_alias"
|
||||||
|
else
|
||||||
|
printf " %s" "$device_alias"
|
||||||
|
fi
|
||||||
|
|
||||||
|
((counter++))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "\n"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# A submenu for a specific device that allows connecting, pairing, and trusting
|
||||||
|
device_menu() {
|
||||||
|
device=$1
|
||||||
|
|
||||||
|
# Get device name and mac address
|
||||||
|
device_name="$(echo "$device" | cut -d ' ' -f 3-)"
|
||||||
|
mac="$(echo "$device" | cut -d ' ' -f 2)"
|
||||||
|
|
||||||
|
# Build options
|
||||||
|
if device_connected "$mac"; then
|
||||||
|
connected="Connected: yes"
|
||||||
|
else
|
||||||
|
connected="Connected: no"
|
||||||
|
fi
|
||||||
|
paired=$(device_paired "$mac")
|
||||||
|
trusted=$(device_trusted "$mac")
|
||||||
|
options="$connected\n$paired\n$trusted\n$divider\n$goback\nExit"
|
||||||
|
|
||||||
|
# Open dmenu menu, read chosen option
|
||||||
|
chosen="$(echo -e "$options" | run_dmenu "$device_name")"
|
||||||
|
|
||||||
|
# Match chosen option to command
|
||||||
|
case $chosen in
|
||||||
|
"" | "$divider")
|
||||||
|
echo "No option chosen."
|
||||||
|
;;
|
||||||
|
"$connected")
|
||||||
|
toggle_connection "$mac"
|
||||||
|
;;
|
||||||
|
"$paired")
|
||||||
|
toggle_paired "$mac"
|
||||||
|
;;
|
||||||
|
"$trusted")
|
||||||
|
toggle_trust "$mac"
|
||||||
|
;;
|
||||||
|
"$goback")
|
||||||
|
show_menu
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Opens a dmenu menu with current bluetooth status and options to connect
|
||||||
|
show_menu() {
|
||||||
|
# Get menu options
|
||||||
|
if power_on; then
|
||||||
|
power="Power: on"
|
||||||
|
|
||||||
|
# Human-readable names of devices, one per line
|
||||||
|
# If scan is off, will only list paired devices
|
||||||
|
devices=$(bluetoothctl devices | grep -F Device | cut -d ' ' -f 3-)
|
||||||
|
|
||||||
|
# Get controller flags
|
||||||
|
scan=$(scan_on)
|
||||||
|
pairable=$(pairable_on)
|
||||||
|
discoverable=$(discoverable_on)
|
||||||
|
|
||||||
|
# Options passed to dmenu
|
||||||
|
options="$devices\n$divider\n$power\n$scan\n$pairable\n$discoverable\nExit"
|
||||||
|
else
|
||||||
|
power="Power: off"
|
||||||
|
options="$power\nExit"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Open dmenu menu, read chosen option
|
||||||
|
chosen="$(echo -e "$options" | run_dmenu "Bluetooth")"
|
||||||
|
|
||||||
|
# Match chosen option to command
|
||||||
|
case $chosen in
|
||||||
|
"" | "$divider")
|
||||||
|
echo "No option chosen."
|
||||||
|
;;
|
||||||
|
"$power")
|
||||||
|
toggle_power
|
||||||
|
;;
|
||||||
|
"$scan")
|
||||||
|
toggle_scan
|
||||||
|
;;
|
||||||
|
"$discoverable")
|
||||||
|
toggle_discoverable
|
||||||
|
;;
|
||||||
|
"$pairable")
|
||||||
|
toggle_pairable
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
device=$(bluetoothctl devices | grep -F "$chosen")
|
||||||
|
# Open a submenu if a device is selected
|
||||||
|
if [[ $device ]]; then device_menu "$device"; fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
original_args=("$@")
|
||||||
|
|
||||||
|
# dmenu command to pipe into. Extra arguments to dmenu-bluetooth are passed through to dmenu. This
|
||||||
|
# allows the user to set fonts, sizes, colours, etc.
|
||||||
|
run_dmenu() {
|
||||||
|
dmenu "${original_args[@]}" -i -p "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
--status)
|
||||||
|
print_status
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
show_menu
|
||||||
|
;;
|
||||||
|
esac
|
41
evelyne/common/dmenu/dmenu-kdeconnect
Executable file
41
evelyne/common/dmenu/dmenu-kdeconnect
Executable file
@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
NOTIFICATIONS_TITLE="KDE Connect"
|
||||||
|
NOTIFICATIONS_EXPIRE_TIME=1000
|
||||||
|
notify-send "$NOTIFICATIONS_TITLE" "Getting devices..." --expire-time="$NOTIFICATIONS_EXPIRE_TIME"
|
||||||
|
|
||||||
|
# Get available devices
|
||||||
|
devices="$(kdeconnect-cli -a)"
|
||||||
|
[ -z "$devices" ] && notify-send "$NOTIFICATIONS_TITLE" "No devices available" --expire-time="$NOTIFICATIONS_EXPIRE_TIME" && exit 1
|
||||||
|
|
||||||
|
# Let the user choose a device
|
||||||
|
device="$(echo "$devices" | sed 's/-\ //' | sed 's/:.*//' | dmenu -i -p "Devices:")"
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]
|
||||||
|
then
|
||||||
|
# Send files to a device
|
||||||
|
📂File() {
|
||||||
|
file="$(zenity --file-selection)"
|
||||||
|
kdeconnect-cli -n "$device" --share "$file"
|
||||||
|
[ "$?" -eq 0 ] && notify-send "$NOTIFICATIONS_TITLE" "📂 Shared file: $file" --expire-time="$NOTIFICATIONS_EXPIRE_TIME"
|
||||||
|
[ "$?" -ne 0 ] && notify-send "$NOTIFICATIONS_TITLE" "📂 Failed to share file: $file" --expire-time="$NOTIFICATIONS_EXPIRE_TIME" && exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ping a device
|
||||||
|
📳Ping() {
|
||||||
|
kdeconnect-cli -n "$device" --ping
|
||||||
|
[ "$?" -eq 0 ] && notify-send "$NOTIFICATIONS_TITLE" "📳 Pinged device: $device" --expire-time="$NOTIFICATIONS_EXPIRE_TIME"
|
||||||
|
[ "$?" -ne 0 ] && notify-send "$NOTIFICATIONS_TITLE" "📳 Unable to ping device: $device" --expire-time="$NOTIFICATIONS_EXPIRE_TIME" && exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make a device ring
|
||||||
|
☎️Ring() {
|
||||||
|
kdeconnect-cli -n "$device" --ring
|
||||||
|
[ "$?" -eq 0 ] && notify-send "$NOTIFICATIONS_TITLE" "☎️ Ringed device: $device" --expire-time="$NOTIFICATIONS_EXPIRE_TIME"
|
||||||
|
[ "$?" -ne 0 ] && notify-send "$NOTIFICATIONS_TITLE" "☎️ Unable to ring device: $device" --expire-time="$NOTIFICATIONS_EXPIRE_TIME" && exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Show functions in dmenu and run the chosen function
|
||||||
|
func="$(declare -F | awk '{print $3}' | dmenu -i -p "$device":)"
|
||||||
|
[ -z "$func" ] || "$func"
|
||||||
|
fi
|
67
evelyne/common/dmenu/dmenu-mount
Executable file
67
evelyne/common/dmenu/dmenu-mount
Executable file
@ -0,0 +1,67 @@
|
|||||||
|
#!/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
|
||||||
|
test -z "$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
|
14
evelyne/common/dmenu/dmenu-mpc
Executable file
14
evelyne/common/dmenu/dmenu-mpc
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
playing=$(mpc current)
|
||||||
|
[ -z "$playing" ] && playing="Stopped"
|
||||||
|
|
||||||
|
▶️play() { mpc play ;}
|
||||||
|
⏸️pause() { mpc pause ;}
|
||||||
|
⏭️next() { mpc next ;}
|
||||||
|
⏮️prev() { mpc prev ;}
|
||||||
|
⏹️stop() { mpc stop ;}
|
||||||
|
🔄update() { mpc update ;}
|
||||||
|
|
||||||
|
func="$(declare -F | awk '{print $3}' | dmenu -i -p "$playing":)"
|
||||||
|
[ -z "$func" ] || "$func"
|
35
evelyne/common/dmenu/dmenu-pass
Executable file
35
evelyne/common/dmenu/dmenu-pass
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
shopt -s nullglob globstar
|
||||||
|
|
||||||
|
typeit=0
|
||||||
|
if [[ $1 == "--type" ]]; then
|
||||||
|
typeit=1
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n $WAYLAND_DISPLAY ]]; then
|
||||||
|
dmenu=dmenu-wl
|
||||||
|
xdotool="ydotool type --file -"
|
||||||
|
elif [[ -n $DISPLAY ]]; then
|
||||||
|
dmenu=dmenu
|
||||||
|
xdotool="xdotool type --clearmodifiers --file -"
|
||||||
|
else
|
||||||
|
echo "Error: No Wayland or X11 display detected" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
prefix=${PASSWORD_STORE_DIR-~/.password-store}
|
||||||
|
password_files=( "$prefix"/**/*.gpg )
|
||||||
|
password_files=( "${password_files[@]#"$prefix"/}" )
|
||||||
|
password_files=( "${password_files[@]%.gpg}" )
|
||||||
|
|
||||||
|
password=$(printf '%s\n' "${password_files[@]}" | "$dmenu" "$@")
|
||||||
|
|
||||||
|
[[ -n $password ]] || exit
|
||||||
|
|
||||||
|
if [[ $typeit -eq 0 ]]; then
|
||||||
|
pass show -c "$password" 2>/dev/null
|
||||||
|
else
|
||||||
|
pass show "$password" | { IFS= read -r pass; printf %s "$pass"; } | $xdotool
|
||||||
|
fi
|
9
evelyne/common/dmenu/dmenu-power
Executable file
9
evelyne/common/dmenu/dmenu-power
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
poweroff() { systemctl shutdown ;}
|
||||||
|
restart() { killall -HUP dwm ;}
|
||||||
|
reboot() { system reboot ;}
|
||||||
|
lock() { bosskey ;}
|
||||||
|
|
||||||
|
func="$(declare -F | awk '{print $3}' | dmenu -i -p "Power:")"
|
||||||
|
[ -z "$func" ] || "$func"
|
18
evelyne/common/dmenu/dmenu-unicode
Executable file
18
evelyne/common/dmenu/dmenu-unicode
Executable file
@ -0,0 +1,18 @@
|
|||||||
|
#!/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/emoji-list | 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
|
44
evelyne/common/dunst.nix
Normal file
44
evelyne/common/dunst.nix
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.dunst = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
global = {
|
||||||
|
# Style
|
||||||
|
format = "<b>%s</b>\n%b";
|
||||||
|
font = "Iosevka 10";
|
||||||
|
width = 370;
|
||||||
|
height = 370;
|
||||||
|
offset = "0x50";
|
||||||
|
padding = 5;
|
||||||
|
frame_width = 2;
|
||||||
|
|
||||||
|
# Location
|
||||||
|
monitor = 0;
|
||||||
|
origin = "bottom-center";
|
||||||
|
};
|
||||||
|
|
||||||
|
urgency_low = {
|
||||||
|
background = "#121317";
|
||||||
|
foreground = "#D6DEEB";
|
||||||
|
frame_color = "#2C323D";
|
||||||
|
timeout = 3;
|
||||||
|
};
|
||||||
|
|
||||||
|
urgency_normal = {
|
||||||
|
background = "#121317";
|
||||||
|
foreground = "#D6DEEB";
|
||||||
|
frame_color = "#2C323D";
|
||||||
|
timeout = 5;
|
||||||
|
};
|
||||||
|
|
||||||
|
urgency_critical = {
|
||||||
|
background = "#121317";
|
||||||
|
foreground = "#D6DEEB";
|
||||||
|
frame_color = "#E06C75";
|
||||||
|
timeout = 10;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
7
evelyne/common/dwm.nix
Normal file
7
evelyne/common/dwm.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
dwm # Suckless dynamic window manager
|
||||||
|
];
|
||||||
|
}
|
9
evelyne/common/editor.nix
Normal file
9
evelyne/common/editor.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Misc editors
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
helix
|
||||||
|
vis
|
||||||
|
];
|
||||||
|
}
|
15
evelyne/common/exa.nix
Normal file
15
evelyne/common/exa.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.exa = {
|
||||||
|
enable = true;
|
||||||
|
enableAliases = true;
|
||||||
|
extraOptions = [
|
||||||
|
"--group-directories-first"
|
||||||
|
"--time-style=long-iso"
|
||||||
|
"--git"
|
||||||
|
"-h"
|
||||||
|
];
|
||||||
|
icons = true;
|
||||||
|
};
|
||||||
|
}
|
9
evelyne/common/fetch.nix
Normal file
9
evelyne/common/fetch.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
pridefetch # System stats with pride flags
|
||||||
|
neofetch # Generic system stats
|
||||||
|
pfetch # Simple system stats
|
||||||
|
];
|
||||||
|
}
|
8
evelyne/common/files.nix
Normal file
8
evelyne/common/files.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
ncdu_2 # Disk space manager
|
||||||
|
clifm # TUI file manager
|
||||||
|
];
|
||||||
|
}
|
8
evelyne/common/games.nix
Normal file
8
evelyne/common/games.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
gzdoom # Modern doom runner
|
||||||
|
pcsx2 # PS2 Emulator
|
||||||
|
];
|
||||||
|
}
|
49
evelyne/common/git.nix
Normal file
49
evelyne/common/git.nix
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
gh
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/git-sync" = {
|
||||||
|
source = ./git/git-sync.sh;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
lfs.enable = true;
|
||||||
|
|
||||||
|
userName = "Evelyne";
|
||||||
|
userEmail = "retroevelyne@outlook.com";
|
||||||
|
signing = {
|
||||||
|
key = "C4F179337DB0D43A2ABE8EC900FC03E8D01EA976";
|
||||||
|
signByDefault = true;
|
||||||
|
gpgPath = "gpg2";
|
||||||
|
};
|
||||||
|
|
||||||
|
aliases = {
|
||||||
|
graph = "log --graph --oneline --decorate";
|
||||||
|
unstage = "reset HEAD --";
|
||||||
|
co = "checkout";
|
||||||
|
br = "branch";
|
||||||
|
ci = "commit";
|
||||||
|
st = "status";
|
||||||
|
ps = "push";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = {
|
||||||
|
init.defaultBranch = "development";
|
||||||
|
pull.rebase = "merges";
|
||||||
|
};
|
||||||
|
|
||||||
|
ignores = [
|
||||||
|
"**/.DS_Store"
|
||||||
|
"**/._.DS_Store"
|
||||||
|
".DS_Store"
|
||||||
|
"._.DS_Store"
|
||||||
|
"**/*.swp"
|
||||||
|
"*.swp"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
6
evelyne/common/git/git-sync.sh
Normal file
6
evelyne/common/git/git-sync.sh
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
git add .
|
||||||
|
git commit -am "$(date --iso-8601)"
|
||||||
|
git pull
|
||||||
|
git push
|
24
evelyne/common/gtk.nix
Normal file
24
evelyne/common/gtk.nix
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
gtk = {
|
||||||
|
enable = true;
|
||||||
|
font = {
|
||||||
|
package = pkgs.iosevka;
|
||||||
|
name = "Iosevka";
|
||||||
|
size = 10;
|
||||||
|
};
|
||||||
|
theme = {
|
||||||
|
package = pkgs.catppuccin-gtk;
|
||||||
|
name = "Catppuccin-Frappe-Standard-Blue-Dark";
|
||||||
|
};
|
||||||
|
iconTheme = {
|
||||||
|
package = pkgs.zafiro-icons;
|
||||||
|
name = "Zafiro-icons-Dark";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
gnome.zenity
|
||||||
|
];
|
||||||
|
}
|
10
evelyne/common/home.nix
Normal file
10
evelyne/common/home.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ config, username, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
home = {
|
||||||
|
inherit username;
|
||||||
|
homeDirectory = "/home/${username}";
|
||||||
|
stateVersion = "22.11";
|
||||||
|
};
|
||||||
|
}
|
19
evelyne/common/htop.nix
Normal file
19
evelyne/common/htop.nix
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.htop = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.htop-vim;
|
||||||
|
settings = {
|
||||||
|
hide_kernel_threads = 1;
|
||||||
|
hide_userland_threads = 1;
|
||||||
|
highlight_base_name = 1;
|
||||||
|
show_cpu_usage = 1;
|
||||||
|
show_cpu_frequency = 1;
|
||||||
|
show_cpu_temperature = 1;
|
||||||
|
degree_fahrenheit = 0;
|
||||||
|
enable_mouse = 1;
|
||||||
|
tree_view = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
10
evelyne/common/jetbrains.nix
Normal file
10
evelyne/common/jetbrains.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
jetbrains.clion
|
||||||
|
jetbrains.goland
|
||||||
|
jetbrains.webstorm
|
||||||
|
jetbrains.pycharm-professional
|
||||||
|
];
|
||||||
|
}
|
25
evelyne/common/kakoune.nix
Normal file
25
evelyne/common/kakoune.nix
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.kakoune = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
numberLines = {
|
||||||
|
enable = true;
|
||||||
|
relative = true;
|
||||||
|
};
|
||||||
|
scrollOff.lines = 3;
|
||||||
|
showWhitespace.enable = true;
|
||||||
|
tabStop = 4;
|
||||||
|
ui = {
|
||||||
|
assistant = "cat";
|
||||||
|
enableMouse = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
plugins = with pkgs.kakounePlugins; [
|
||||||
|
kakoune-rainbow
|
||||||
|
powerline-kak
|
||||||
|
auto-pairs-kak
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
10
evelyne/common/kdeconnect.nix
Normal file
10
evelyne/common/kdeconnect.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.kdeconnect.enable = true;
|
||||||
|
|
||||||
|
home.file.".xinitrc".text = ''
|
||||||
|
# Start kdeconnect when entering a graphical session
|
||||||
|
systemctl restart --user kdeconnect &
|
||||||
|
'';
|
||||||
|
}
|
7
evelyne/common/kdenlive.nix
Normal file
7
evelyne/common/kdenlive.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
kdenlive
|
||||||
|
];
|
||||||
|
}
|
26
evelyne/common/lf.nix
Normal file
26
evelyne/common/lf.nix
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.lf = {
|
||||||
|
enable = true;
|
||||||
|
previewer.source = ./lf/scope;
|
||||||
|
settings = {
|
||||||
|
relativenumber = true;
|
||||||
|
number = true;
|
||||||
|
hidden = false;
|
||||||
|
preview = true;
|
||||||
|
icons = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.configFile = {
|
||||||
|
"lf/icons" = {
|
||||||
|
source = ./lf/icons;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
ueberzug
|
||||||
|
file
|
||||||
|
];
|
||||||
|
}
|
93
evelyne/common/lf/icons
Normal file
93
evelyne/common/lf/icons
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
di
|
||||||
|
fi
|
||||||
|
tw
|
||||||
|
ow
|
||||||
|
ln
|
||||||
|
or
|
||||||
|
ex
|
||||||
|
*.txt
|
||||||
|
*.mom
|
||||||
|
*.me
|
||||||
|
*.ms
|
||||||
|
*.avif
|
||||||
|
*.png
|
||||||
|
*.webp
|
||||||
|
*.ico
|
||||||
|
*.gif
|
||||||
|
*.tif
|
||||||
|
*.tiff
|
||||||
|
*.jpg
|
||||||
|
*.jpe
|
||||||
|
*.jpeg
|
||||||
|
*.heif
|
||||||
|
*.svg
|
||||||
|
*.xcf
|
||||||
|
*.gpg
|
||||||
|
*.pdf
|
||||||
|
*.djvu
|
||||||
|
*.epub
|
||||||
|
*.csv
|
||||||
|
*.xlsx
|
||||||
|
*.tex
|
||||||
|
*.md
|
||||||
|
*.mp3
|
||||||
|
*.opus
|
||||||
|
*.ogg
|
||||||
|
*.m4a
|
||||||
|
*.flac
|
||||||
|
*.wav
|
||||||
|
*.mkv
|
||||||
|
*.mp4
|
||||||
|
*.webm
|
||||||
|
*.mpeg
|
||||||
|
*.avi
|
||||||
|
*.mov
|
||||||
|
*.mpg
|
||||||
|
*.wmv
|
||||||
|
*.m4b
|
||||||
|
*.flv
|
||||||
|
*.zip
|
||||||
|
*.rar
|
||||||
|
*.7z
|
||||||
|
*.tar
|
||||||
|
*.gz
|
||||||
|
*.z64
|
||||||
|
*.v64
|
||||||
|
*.n64
|
||||||
|
*.gdi
|
||||||
|
*.gba
|
||||||
|
*.nes
|
||||||
|
*.exe
|
||||||
|
*.1
|
||||||
|
*.nfo
|
||||||
|
*.info
|
||||||
|
*.log
|
||||||
|
*.iso
|
||||||
|
*.img
|
||||||
|
*.bib
|
||||||
|
*.part
|
||||||
|
*.torrent
|
||||||
|
*.gitignore
|
||||||
|
*.jar
|
||||||
|
*.java
|
||||||
|
*.r
|
||||||
|
*.R
|
||||||
|
*.rmd
|
||||||
|
*.Rmd
|
||||||
|
*.m
|
||||||
|
*.rs
|
||||||
|
*.go
|
||||||
|
*.c
|
||||||
|
*.cpp
|
||||||
|
*.h
|
||||||
|
*.py
|
||||||
|
*.js
|
||||||
|
*.json
|
||||||
|
*.ts
|
||||||
|
*.sh
|
||||||
|
*.html
|
||||||
|
*.css
|
||||||
|
*.xml
|
||||||
|
*.php
|
||||||
|
*.nix
|
||||||
|
*.vim
|
52
evelyne/common/lf/scope
Executable file
52
evelyne/common/lf/scope
Executable file
@ -0,0 +1,52 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# File preview handler for lf.
|
||||||
|
|
||||||
|
set -C -f
|
||||||
|
IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}"
|
||||||
|
|
||||||
|
image() {
|
||||||
|
if [ -f "$1" ] && [ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && command -V ueberzug >/dev/null 2>&1; then
|
||||||
|
printf '{"action": "add", "identifier": "PREVIEW", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n' "$4" "$5" "$(($2-1))" "$(($3-1))" "$1" > "$FIFO_UEBERZUG"
|
||||||
|
else
|
||||||
|
mediainfo "$6"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ifub() {
|
||||||
|
[ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && command -V ueberzug >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Note that the cache file name is a function of file information, meaning if
|
||||||
|
# an image appears in multiple places across the machine, it will not have to
|
||||||
|
# be regenerated once seen.
|
||||||
|
|
||||||
|
case "$(file --dereference --brief --mime-type -- "$1")" in
|
||||||
|
image/avif) CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
|
||||||
|
[ ! -f "$CACHE" ] && convert "$1" "$CACHE.jpg"
|
||||||
|
image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1" ;;
|
||||||
|
image/*) image "$1" "$2" "$3" "$4" "$5" "$1" ;;
|
||||||
|
text/html) lynx -width="$4" -display_charset=utf-8 -dump "$1" ;;
|
||||||
|
text/troff) man ./ "$1" | col -b ;;
|
||||||
|
text/* | */xml | application/json) bat --terminal-width "$(($4-2))" -f "$1" ;;
|
||||||
|
audio/* | application/octet-stream) mediainfo "$1" || exit 1 ;;
|
||||||
|
video/* )
|
||||||
|
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
|
||||||
|
[ ! -f "$CACHE" ] && ffmpegthumbnailer -i "$1" -o "$CACHE" -s 0
|
||||||
|
image "$CACHE" "$2" "$3" "$4" "$5" "$1"
|
||||||
|
;;
|
||||||
|
*/pdf)
|
||||||
|
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
|
||||||
|
[ ! -f "$CACHE.jpg" ] && pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE"
|
||||||
|
image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1"
|
||||||
|
;;
|
||||||
|
*/epub+zip|*/mobi*)
|
||||||
|
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
|
||||||
|
[ ! -f "$CACHE.jpg" ] && gnome-epub-thumbnailer "$1" "$CACHE.jpg"
|
||||||
|
image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1"
|
||||||
|
;;
|
||||||
|
application/*zip) atool --list -- "$1" ;;
|
||||||
|
*opendocument*) odt2txt "$1" ;;
|
||||||
|
application/pgp-encrypted) gpg -d -- "$1" ;;
|
||||||
|
esac
|
||||||
|
exit 1
|
12
evelyne/common/librewolf.nix
Normal file
12
evelyne/common/librewolf.nix
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.librewolf = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
"browser.uidensity" = 1;
|
||||||
|
"webgl.disabled" = false;
|
||||||
|
"privacy.resistFingerprinting" = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
9
evelyne/common/media.nix
Normal file
9
evelyne/common/media.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
libheif # Manage .heif files from phones
|
||||||
|
gcolor2 # Color viewer and eyedropper
|
||||||
|
ffmpeg # Video manipulator
|
||||||
|
];
|
||||||
|
}
|
11
evelyne/common/messaging.nix
Normal file
11
evelyne/common/messaging.nix
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
element-desktop # Matrix client
|
||||||
|
signal-desktop # Signal client
|
||||||
|
discord-canary # Discord client
|
||||||
|
ripcord # Better discord client
|
||||||
|
nheko # Better matrix client
|
||||||
|
];
|
||||||
|
}
|
9
evelyne/common/minecraft.nix
Normal file
9
evelyne/common/minecraft.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
prismlauncher # Minecraft launcher
|
||||||
|
minecraft # Actual minecraft
|
||||||
|
jdk # Needed for running minecraft servers
|
||||||
|
];
|
||||||
|
}
|
12
evelyne/common/mommy.nix
Normal file
12
evelyne/common/mommy.nix
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.zsh.initExtra = ''
|
||||||
|
precmd() { [ $? -ne 0 ] && $HOME/.local/bin/mommy -n }
|
||||||
|
'';
|
||||||
|
|
||||||
|
home.file.".local/bin/mommy" = {
|
||||||
|
source = ./mommy/shell-mommy.sh;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
}
|
77
evelyne/common/mommy/shell-mommy.sh
Executable file
77
evelyne/common/mommy/shell-mommy.sh
Executable file
@ -0,0 +1,77 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
usage() { printf "usage: $0 [-pn]\n -p: positive response\n -n: negative response\n"; }
|
||||||
|
[ $# -eq 0 ] && usage && exit 0;
|
||||||
|
|
||||||
|
[ -z "$MOMMYS_LITTLE" ] && MOMMYS_LITTLE="girl"
|
||||||
|
[ -z "$MOMMYS_PRONOUN" ] && MOMMYS_PRONOUN="her"
|
||||||
|
[ -z "$MOMMYS_ROLE" ] && MOMMYS_ROLE="mommy"
|
||||||
|
[ -z "$MOMMY_COLOR" ] && MOMMY_COLOR='\e[38;5;217m'
|
||||||
|
COLOR_RESET='\e[0m'
|
||||||
|
|
||||||
|
negative() {
|
||||||
|
RESPONSES=(
|
||||||
|
"do you need $MOMMYS_ROLE's help~? ❤️"
|
||||||
|
"don't give up, my love~ ❤️"
|
||||||
|
"don't worry, $MOMMYS_ROLE is here to help you~ ❤️"
|
||||||
|
"I believe in you, my sweet $MOMMYS_LITTLE~ ❤️"
|
||||||
|
"it's okay to make mistakes, my dear~ ❤️"
|
||||||
|
"just a little further, sweetie~ ❤️"
|
||||||
|
"let's try again together, okay~? ❤️"
|
||||||
|
"$MOMMYS_ROLE believes in you, and knows you can overcome this~ ❤️"
|
||||||
|
"$MOMMYS_ROLE believes in you~ ❤️"
|
||||||
|
"$MOMMYS_ROLE is always here for you, no matter what~ ❤️"
|
||||||
|
"$MOMMYS_ROLE is here to help you through it~ ❤️"
|
||||||
|
"$MOMMYS_ROLE is proud of you for trying, no matter what the outcome~ ❤️"
|
||||||
|
"$MOMMYS_ROLE knows it's tough, but you can do it~ ❤️"
|
||||||
|
"$MOMMYS_ROLE knows $MOMMYS_PRONOUN little $MOMMYS_LITTLE can do better~ ❤️"
|
||||||
|
"$MOMMYS_ROLE knows you can do it, even if it's tough~ ❤️"
|
||||||
|
"$MOMMYS_ROLE knows you're feeling down, but you'll get through it~ ❤️"
|
||||||
|
"$MOMMYS_ROLE knows you're trying your best~ ❤️"
|
||||||
|
"$MOMMYS_ROLE loves you, and is here to support you~ ❤️"
|
||||||
|
"$MOMMYS_ROLE still loves you no matter what~ ❤️"
|
||||||
|
"you're doing your best, and that's all that matters to $MOMMYS_ROLE~ ❤️"
|
||||||
|
"$MOMMYS_ROLE is always here to encourage you~ ❤️"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
positive() {
|
||||||
|
RESPONSES=(
|
||||||
|
"*pats your head*"
|
||||||
|
"awe, what a good $MOMMYS_LITTLE~\n$MOMMYS_ROLE knew you could do it~ ❤️"
|
||||||
|
"good $MOMMYS_LITTLE~\n$MOMMYS_ROLE's so proud of you~ ❤️"
|
||||||
|
"keep up the good work, my love~ ❤️"
|
||||||
|
"$MOMMYS_ROLE is proud of the progress you've made~ ❤️"
|
||||||
|
"$MOMMYS_ROLE is so grateful to have you as $MOMMYS_PRONOUN little $MOMMYS_LITTLE~ ❤️"
|
||||||
|
"I'm so proud of you, my love~ ❤️"
|
||||||
|
"$MOMMYS_ROLE is so proud of you~ ❤️"
|
||||||
|
"$MOMMYS_ROLE loves seeing $MOMMYS_PRONOUN little $MOMMYS_LITTLE succeed~ ❤️"
|
||||||
|
"$MOMMYS_ROLE thinks $MOMMYS_PRONOUN little $MOMMYS_LITTLE earned a big hug~ ❤️"
|
||||||
|
"that's a good $MOMMYS_LITTLE~ ❤️"
|
||||||
|
"you did an amazing job, my dear~ ❤️"
|
||||||
|
"you're such a smart cookie~ ❤️"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
mommy_says() {
|
||||||
|
says=$1
|
||||||
|
printf "$MOMMY_COLOR$says$COLOR_RESET\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
random() {
|
||||||
|
[ $1 == "positive" ] && positive
|
||||||
|
[ $1 == "negative" ] && negative
|
||||||
|
|
||||||
|
index=$(($RANDOM % ${#RESPONSES[@]}))
|
||||||
|
response="${RESPONSES[$index]}"
|
||||||
|
|
||||||
|
mommy_says "$response"
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts "pn" options; do
|
||||||
|
case $options in
|
||||||
|
p) random "positive" ;;
|
||||||
|
n) random "negative" ;;
|
||||||
|
*) usage; exit 1 ;;
|
||||||
|
esac
|
||||||
|
done
|
35
evelyne/common/mpd.nix
Normal file
35
evelyne/common/mpd.nix
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{ config, pkgs, username, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.mpd = {
|
||||||
|
enable = true;
|
||||||
|
musicDirectory = "${config.home.homeDirectory}/Music";
|
||||||
|
extraConfig = ''
|
||||||
|
auto_update "yes"
|
||||||
|
|
||||||
|
audio_output {
|
||||||
|
type "pipewire"
|
||||||
|
name "PipeWire Sound Server"
|
||||||
|
}
|
||||||
|
|
||||||
|
audio_output {
|
||||||
|
type "fifo"
|
||||||
|
name "Visualizer feed"
|
||||||
|
path "/tmp/mpd.fifo"
|
||||||
|
format "44100:16:2"
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
mpc_cli
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.ncmpcpp = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
ncmpcpp_directory = "${config.home.homeDirectory}/.local/share/ncmpcpp";
|
||||||
|
lyrics_directory = "${config.home.homeDirectory}/.local/share/lyrics";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
10
evelyne/common/mpv.nix
Normal file
10
evelyne/common/mpv.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.mpv = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
loop-file = "inf";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
27
evelyne/common/neovim.nix
Normal file
27
evelyne/common/neovim.nix
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.neovim = {
|
||||||
|
enable = true;
|
||||||
|
defaultEditor = true;
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
nodejs
|
||||||
|
sumneko-lua-language-server
|
||||||
|
nodePackages.bash-language-server
|
||||||
|
nodePackages.vim-language-server
|
||||||
|
nodePackages.pyright
|
||||||
|
rust-analyzer
|
||||||
|
rnix-lsp
|
||||||
|
universal-ctags
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
neovide
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg.configFile."nvim" = {
|
||||||
|
source = ./neovim;
|
||||||
|
recursive = true;
|
||||||
|
};
|
||||||
|
}
|
1
evelyne/common/neovim/.gitignore
vendored
Normal file
1
evelyne/common/neovim/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
plugin
|
21
evelyne/common/neovim/LICENSE
Normal file
21
evelyne/common/neovim/LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 SpyHoodle
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
22
evelyne/common/neovim/README.md
Normal file
22
evelyne/common/neovim/README.md
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Maddie's NeoVim config
|
||||||
|
A clean, fast, feature-rich IDE layer for my needs in [NeoVim](https://neovim.io/).<br>
|
||||||
|
Written in Lua, designed for NeoVim v0.7.0 or higher.
|
||||||
|
|
||||||
|
## Some highlights
|
||||||
|
- Written entirely in Lua, making it clean and modern for NeoVim
|
||||||
|
- Uses [impatient.nvim](https://github.com/lewis6991/impatient.nvim) which greatly improves startup performance
|
||||||
|
- Uses the latest NeoVim LSP features & tree-sitter for highlighting
|
||||||
|
- Neat, small and structured files that are easy to read with some commenting
|
||||||
|
- Helpful features for programming such as highlighting indents & whitespaces
|
||||||
|
- Features for writing prose and taking notes, such as [vimwiki](https://github.com/vimwiki/vimwiki) and [orgmode](https://github.com/nvim-orgmode/orgmode)
|
||||||
|
- Extensible Lua written NeoVim specific package manager from [packer.nvim](https://github.com/wbthomason/packer.nvim)
|
||||||
|
- Modern standard Lua plugins such as [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim) and [nvim-tree](https://github.com/kyazdani42/nvim-tree.lua)
|
||||||
|
- Fixed scrolling in terminals like st with patches and smooth scrolling
|
||||||
|
- Extra configuration for [Neovide](https://github.com/neovide/neovide), a graphical NeoVim client
|
||||||
|
- Shortcuts for tabs & splits with the leader key as space
|
||||||
|
- System clipboard, mouse and scrolling support
|
||||||
|
|
||||||
|
## Work in progress!
|
||||||
|
I'm constantly updating and changing this configuration, by adding new plugins and settings.<br>
|
||||||
|
I likely won't make changes to make the config more acceptable and general to the public.<br>
|
||||||
|
Made with ❤️ and 🏳️⚧️.
|
253
evelyne/common/neovim/init.lua
Normal file
253
evelyne/common/neovim/init.lua
Normal file
@ -0,0 +1,253 @@
|
|||||||
|
-- Basic vim config
|
||||||
|
require('basics')
|
||||||
|
require('keymaps')
|
||||||
|
require('colours')
|
||||||
|
|
||||||
|
-- Packages
|
||||||
|
return require('packer').startup(function(use)
|
||||||
|
-- Neovim package manager
|
||||||
|
use 'wbthomason/packer.nvim'
|
||||||
|
|
||||||
|
-- Atom's One Dark theme
|
||||||
|
use 'navarasu/onedark.nvim'
|
||||||
|
|
||||||
|
-- Gruvbox theme
|
||||||
|
use 'ellisonleao/gruvbox.nvim'
|
||||||
|
|
||||||
|
-- VSCode theme
|
||||||
|
use 'Mofiqul/vscode.nvim'
|
||||||
|
|
||||||
|
-- Everforest theme
|
||||||
|
use 'sainnhe/everforest'
|
||||||
|
|
||||||
|
-- Smooth scrolling
|
||||||
|
use 'psliwka/vim-smoothie'
|
||||||
|
|
||||||
|
-- Comments in any language
|
||||||
|
use 'tpope/vim-commentary'
|
||||||
|
|
||||||
|
-- Surrounding
|
||||||
|
use 'tpope/vim-surround'
|
||||||
|
|
||||||
|
-- Repeating
|
||||||
|
use 'tpope/vim-repeat'
|
||||||
|
|
||||||
|
-- Vim-wiki
|
||||||
|
use 'vimwiki/vimwiki'
|
||||||
|
|
||||||
|
-- Rainbow brackets
|
||||||
|
use 'p00f/nvim-ts-rainbow'
|
||||||
|
|
||||||
|
-- Git bindings
|
||||||
|
use 'tpope/vim-fugitive'
|
||||||
|
|
||||||
|
-- Latex
|
||||||
|
use 'lervag/vimtex'
|
||||||
|
|
||||||
|
-- Easy alignment
|
||||||
|
use 'junegunn/vim-easy-align'
|
||||||
|
|
||||||
|
|
||||||
|
-- Transparent background
|
||||||
|
use {
|
||||||
|
'xiyaowong/nvim-transparent',
|
||||||
|
config = function()
|
||||||
|
vim.g.transparent_enabled = false
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Zen mode
|
||||||
|
use {
|
||||||
|
"folke/zen-mode.nvim",
|
||||||
|
config = function()
|
||||||
|
require('zen-mode').setup()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Autosaving
|
||||||
|
use {
|
||||||
|
'pocco81/auto-save.nvim',
|
||||||
|
config = function()
|
||||||
|
require('auto-save').setup({
|
||||||
|
enabled = true,
|
||||||
|
execution_message = {
|
||||||
|
message = function()
|
||||||
|
return ('>w< autosaved at ' .. vim.fn.strftime('%H:%M:%S'))
|
||||||
|
end,
|
||||||
|
cleaning_interval = 1250
|
||||||
|
},
|
||||||
|
trigger_events = { 'InsertLeave', 'TextChanged' }
|
||||||
|
})
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Git signs
|
||||||
|
use {
|
||||||
|
'lewis6991/gitsigns.nvim',
|
||||||
|
config = function()
|
||||||
|
require('gitsigns').setup()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Github Copilot
|
||||||
|
use {
|
||||||
|
'zbirenbaum/copilot.lua',
|
||||||
|
event = { 'VimEnter' },
|
||||||
|
config = function()
|
||||||
|
vim.defer_fn(function()
|
||||||
|
require('copilot').setup()
|
||||||
|
end, 100)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Liveshare
|
||||||
|
use {
|
||||||
|
'jbyuki/instant.nvim',
|
||||||
|
config = function()
|
||||||
|
vim.g.instant_username = "Maddie"
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Fuzzy finder
|
||||||
|
use {
|
||||||
|
'nvim-telescope/telescope.nvim',
|
||||||
|
requires = { 'nvim-lua/plenary.nvim' }
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Auto-pairs
|
||||||
|
use {
|
||||||
|
'windwp/nvim-autopairs',
|
||||||
|
config = function()
|
||||||
|
require('nvim-autopairs').setup()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Highlight whitespaces
|
||||||
|
use {
|
||||||
|
'ntpeters/vim-better-whitespace',
|
||||||
|
config = function()
|
||||||
|
vim.g.better_whitespace_filetypes_blacklist = { 'startify' }
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Highlight indents
|
||||||
|
use {
|
||||||
|
'nathanaelkane/vim-indent-guides',
|
||||||
|
config = function()
|
||||||
|
vim.g.indent_guides_enable_on_vim_startup = 1
|
||||||
|
vim.g.indent_guides_exclude_filetypes = { 'help', 'NvimTree', 'startify' }
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Color hex codes
|
||||||
|
use {
|
||||||
|
'norcalli/nvim-colorizer.lua',
|
||||||
|
config = function()
|
||||||
|
require('colorizer').setup()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Statusbar line
|
||||||
|
use {
|
||||||
|
'nvim-lualine/lualine.nvim',
|
||||||
|
requires = { 'kyazdani42/nvim-web-devicons', opt = true },
|
||||||
|
config = function()
|
||||||
|
require('lualine').setup()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- File browser
|
||||||
|
use {
|
||||||
|
'kyazdani42/nvim-tree.lua',
|
||||||
|
requires = { 'kyazdani42/nvim-web-devicons' },
|
||||||
|
config = function()
|
||||||
|
require('nvim-tree').setup()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Org-mode
|
||||||
|
use {
|
||||||
|
'nvim-orgmode/orgmode',
|
||||||
|
config = function()
|
||||||
|
require('orgmode').setup()
|
||||||
|
require('orgmode').setup_ts_grammar()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Speedup neovim startup
|
||||||
|
use {
|
||||||
|
'lewis6991/impatient.nvim',
|
||||||
|
config = function()
|
||||||
|
require('impatient')
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Rust tools
|
||||||
|
use 'neovim/nvim-lspconfig'
|
||||||
|
use {
|
||||||
|
'simrat39/rust-tools.nvim',
|
||||||
|
config = function()
|
||||||
|
require('rust-tools').setup()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-- -- Language Server Protocol
|
||||||
|
-- use {
|
||||||
|
-- 'neovim/nvim-lspconfig',
|
||||||
|
-- config = function()
|
||||||
|
-- require('lspconfig').pyright.setup{}
|
||||||
|
-- require('lspconfig').rnix.setup{}
|
||||||
|
-- require('lspconfig').bashls.setup{}
|
||||||
|
-- require('lspconfig').vimls.setup{}
|
||||||
|
-- require('lspconfig').sumneko_lua.setup {
|
||||||
|
-- settings = {
|
||||||
|
-- Lua = {
|
||||||
|
-- diagnostics = {
|
||||||
|
-- globals = { 'vim' }
|
||||||
|
-- }
|
||||||
|
-- }
|
||||||
|
-- }
|
||||||
|
-- }
|
||||||
|
-- end
|
||||||
|
-- }
|
||||||
|
|
||||||
|
-- Code completion
|
||||||
|
use 'L3MON4D3/LuaSnip'
|
||||||
|
use 'rafamadriz/friendly-snippets'
|
||||||
|
use 'zbirenbaum/copilot-cmp'
|
||||||
|
use 'hrsh7th/cmp-nvim-lsp'
|
||||||
|
use 'hrsh7th/cmp-nvim-lua'
|
||||||
|
use 'hrsh7th/cmp-buffer'
|
||||||
|
use 'hrsh7th/cmp-path'
|
||||||
|
use 'hrsh7th/cmp-cmdline'
|
||||||
|
use {
|
||||||
|
'hrsh7th/nvim-cmp',
|
||||||
|
requires = { 'kyazdani42/nvim-web-devicons' },
|
||||||
|
config = function()
|
||||||
|
require('plugins.cmp')
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Treesitter for highlighting
|
||||||
|
use {
|
||||||
|
'nvim-treesitter/nvim-treesitter',
|
||||||
|
config = function()
|
||||||
|
require('nvim-treesitter.configs').setup {
|
||||||
|
ensure_installed = { 'cpp', 'lua', 'go', 'rust', 'python', 'nix', 'vim', 'markdown', 'html', 'css' },
|
||||||
|
sync_install = true,
|
||||||
|
highlight = {
|
||||||
|
enable = true,
|
||||||
|
additional_vim_regex_highlighting = false,
|
||||||
|
},
|
||||||
|
rainbow = {
|
||||||
|
enable = true,
|
||||||
|
extended_mode = true
|
||||||
|
},
|
||||||
|
indent = {
|
||||||
|
enable = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end)
|
36
evelyne/common/neovim/lua/basics.lua
Normal file
36
evelyne/common/neovim/lua/basics.lua
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
-- Vim settings
|
||||||
|
vim.g.mapleader = ' '
|
||||||
|
vim.o.encoding = 'utf8'
|
||||||
|
vim.o.background = 'dark'
|
||||||
|
vim.o.relativenumber = true
|
||||||
|
vim.o.number = true
|
||||||
|
vim.o.wrap = false
|
||||||
|
vim.o.expandtab = true
|
||||||
|
vim.o.incsearch = true
|
||||||
|
vim.o.scrolloff = 5
|
||||||
|
vim.o.tabstop = 2
|
||||||
|
vim.o.shiftwidth = 2
|
||||||
|
vim.o.cursorline = true
|
||||||
|
vim.o.ignorecase = true
|
||||||
|
vim.o.swapfile = false
|
||||||
|
vim.o.undofile = true
|
||||||
|
vim.o.splitbelow = true
|
||||||
|
vim.o.splitright = true
|
||||||
|
vim.o.errorbells = false
|
||||||
|
vim.o.termguicolors = true
|
||||||
|
vim.o.showmode = false
|
||||||
|
vim.o.showtabline = 1
|
||||||
|
vim.o.signcolumn = 'auto'
|
||||||
|
vim.o.clipboard = 'unnamedplus'
|
||||||
|
vim.o.mouse = 'a'
|
||||||
|
vim.o.go = 'a'
|
||||||
|
|
||||||
|
-- Netrw
|
||||||
|
vim.g["netrw_banner"] = 0
|
||||||
|
vim.g["netrw_liststyle"] = 3
|
||||||
|
vim.g["netrw_winsize"] = 25
|
||||||
|
|
||||||
|
-- Neovide
|
||||||
|
vim.o.guifont = 'JetBrainsMono Nerd Font:h12'
|
||||||
|
vim.g.neovide_cursor_vfx_mode = 'railgun'
|
||||||
|
vim.g.neovide_remember_window_size = true
|
1
evelyne/common/neovim/lua/colours.lua
Normal file
1
evelyne/common/neovim/lua/colours.lua
Normal file
@ -0,0 +1 @@
|
|||||||
|
vim.cmd([[colorscheme onedark]])
|
59
evelyne/common/neovim/lua/keymaps.lua
Normal file
59
evelyne/common/neovim/lua/keymaps.lua
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
-- Neat variables
|
||||||
|
local opts = { noremap = true, silent = true }
|
||||||
|
local term_opts = { silent = true }
|
||||||
|
local keymap = vim.api.nvim_set_keymap
|
||||||
|
|
||||||
|
-- Custom/special keymaps
|
||||||
|
keymap('n', '<leader>c', ':sp<CR> :term<CR> :resize 20N<CR> i', term_opts)
|
||||||
|
keymap('n', '<leader>r', ':luafile %<CR>:PackerSync<CR>', term_opts)
|
||||||
|
keymap('n', '<leader>h', ':nohl<CR>', term_opts)
|
||||||
|
keymap('n', '<leader>z', ':ZenMode<CR>:set wrap<CR>:set linebreak<CR>', term_opts)
|
||||||
|
keymap('n', '<leader>Z', ':ZenMode<CR>:set nowrap<CR>:set nolinebreak<CR>', term_opts)
|
||||||
|
keymap('n', '<C-c>', ':Telescope colorscheme<CR>', term_opts)
|
||||||
|
keymap('n', '<C-q>', ':wqa<CR>', term_opts)
|
||||||
|
keymap('n', '<C-s>', ':w<CR>', term_opts)
|
||||||
|
keymap('n', 'U', ':redo<CR>', term_opts)
|
||||||
|
|
||||||
|
-- Window management
|
||||||
|
keymap('n', '<leader>vs', ':vs<CR>', opts)
|
||||||
|
keymap('n', '<leader>hs', ':sp<CR>', opts)
|
||||||
|
keymap('n', '<leader>tn', ':tabnew<CR>', opts)
|
||||||
|
keymap('n', '<leader>th', ':tabprev<CR>', opts)
|
||||||
|
keymap('n', '<leader>tj', ':tabprev<CR>', opts)
|
||||||
|
keymap('n', '<leader>tk', ':tabnext<CR>', opts)
|
||||||
|
keymap('n', '<leader>tl', ':tabnext<CR>', opts)
|
||||||
|
keymap('n', '<leader>to', ':tabo<CR>', opts)
|
||||||
|
keymap('n', '<leader>tc', ':tabc<CR>', opts)
|
||||||
|
|
||||||
|
-- Window navigation
|
||||||
|
keymap('n', '<C-Tab>', '<C-w>w', opts)
|
||||||
|
keymap('n', '<C-h>', '<C-w>h', opts)
|
||||||
|
keymap('n', '<C-j>', '<C-w>j', opts)
|
||||||
|
keymap('n', '<C-k>', '<C-w>k', opts)
|
||||||
|
keymap('n', '<C-l>', '<C-w>l', opts)
|
||||||
|
|
||||||
|
-- Buffer navigation
|
||||||
|
keymap('n', '<S-l>', ':bnext<CR>', opts)
|
||||||
|
keymap('n', '<S-h>', ':bprevious<CR>', opts)
|
||||||
|
|
||||||
|
-- Stay in visual mode when indenting
|
||||||
|
keymap('v', '<', '<gv', opts)
|
||||||
|
keymap('v', '>', '>gv', opts)
|
||||||
|
|
||||||
|
-- When moving up or down, move physical lines not file lines
|
||||||
|
keymap('n', 'j', 'gj', opts)
|
||||||
|
keymap('n', 'k', 'gk', opts)
|
||||||
|
|
||||||
|
-- NvimTree
|
||||||
|
keymap('n', '<C-n>', ':NvimTreeToggle<CR>', term_opts)
|
||||||
|
|
||||||
|
-- Telescope
|
||||||
|
keymap('n', '<C-f>', '<cmd>lua require("telescope.builtin").find_files()<CR>', opts)
|
||||||
|
keymap('n', '<leader>ff', '<cmd>lua require("telescope.builtin").find_files()<CR>', opts)
|
||||||
|
keymap('n', '<leader>fg', '<cmd>lua require("telescope.builtin").live_grep()<CR>', opts)
|
||||||
|
keymap('n', '<leader>fb', '<cmd>lua require("telescope.builtin").buffers()<CR>', opts)
|
||||||
|
keymap('n', '<leader>fh', '<cmd>lua require("telescope.builtin").help_tags()<CR>', opts)
|
||||||
|
|
||||||
|
-- Easy alignment
|
||||||
|
keymap('n', 'ga', ':EasyAlign', opts)
|
||||||
|
keymap('v', 'ga', ':EasyAlign', opts)
|
117
evelyne/common/neovim/lua/plugins/cmp.lua
Normal file
117
evelyne/common/neovim/lua/plugins/cmp.lua
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
local cmp = require('cmp')
|
||||||
|
local luasnip = require('luasnip')
|
||||||
|
require('luasnip.loaders.from_vscode').lazy_load()
|
||||||
|
|
||||||
|
local check_backspace = function()
|
||||||
|
local col = vim.fn.col "." - 1
|
||||||
|
return col == 0 or vim.fn.getline("."):sub(col, col):match "%s"
|
||||||
|
end
|
||||||
|
|
||||||
|
local kind_icons = {
|
||||||
|
Text = "",
|
||||||
|
Method = "m",
|
||||||
|
Function = "",
|
||||||
|
Constructor = "",
|
||||||
|
Field = "",
|
||||||
|
Variable = "",
|
||||||
|
Class = "",
|
||||||
|
Interface = "",
|
||||||
|
Module = "",
|
||||||
|
Property = "",
|
||||||
|
Unit = "",
|
||||||
|
Value = "",
|
||||||
|
Enum = "",
|
||||||
|
Keyword = "",
|
||||||
|
Snippet = "",
|
||||||
|
Color = "",
|
||||||
|
File = "",
|
||||||
|
Reference = "",
|
||||||
|
Folder = "",
|
||||||
|
EnumMember = "",
|
||||||
|
Constant = "",
|
||||||
|
Struct = "",
|
||||||
|
Event = "",
|
||||||
|
Operator = "",
|
||||||
|
TypeParameter = "",
|
||||||
|
}
|
||||||
|
|
||||||
|
cmp.setup {
|
||||||
|
snippet = {
|
||||||
|
expand = function(args)
|
||||||
|
luasnip.lsp_expand(args.body)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
mapping = {
|
||||||
|
["<C-k>"] = cmp.mapping.select_prev_item(),
|
||||||
|
["<C-j>"] = cmp.mapping.select_next_item(),
|
||||||
|
["<C-b>"] = cmp.mapping(cmp.mapping.scroll_docs(-1), { "i", "c" }),
|
||||||
|
["<C-f>"] = cmp.mapping(cmp.mapping.scroll_docs(1), { "i", "c" }),
|
||||||
|
["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
|
||||||
|
["<C-y>"] = cmp.config.disable,
|
||||||
|
["<C-e>"] = cmp.mapping {
|
||||||
|
i = cmp.mapping.abort(),
|
||||||
|
c = cmp.mapping.close(),
|
||||||
|
},
|
||||||
|
["<CR>"] = cmp.mapping.confirm { select = true },
|
||||||
|
["<Tab>"] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_next_item()
|
||||||
|
elseif luasnip.expandable() then
|
||||||
|
luasnip.expand()
|
||||||
|
elseif luasnip.expand_or_jumpable() then
|
||||||
|
luasnip.expand_or_jump()
|
||||||
|
elseif check_backspace() then
|
||||||
|
fallback()
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, {
|
||||||
|
"i",
|
||||||
|
"s",
|
||||||
|
}),
|
||||||
|
["<S-Tab>"] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_prev_item()
|
||||||
|
elseif luasnip.jumpable(-1) then
|
||||||
|
luasnip.jump(-1)
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, {
|
||||||
|
"i",
|
||||||
|
"s",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
formatting = {
|
||||||
|
fields = { "kind", "abbr", "menu" },
|
||||||
|
format = function(entry, vim_item)
|
||||||
|
vim_item.kind = string.format("%s", kind_icons[vim_item.kind])
|
||||||
|
vim_item.menu = ({
|
||||||
|
nvim_lsp = "[LSP]",
|
||||||
|
nvim_lua = "[NVIM_LUA]",
|
||||||
|
copilot = "[Copilot]",
|
||||||
|
luasnip = "[Snippet]",
|
||||||
|
buffer = "[Buffer]",
|
||||||
|
path = "[Path]",
|
||||||
|
})[entry.source.name]
|
||||||
|
return vim_item
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
sources = {
|
||||||
|
{ name = "nvim_lsp" },
|
||||||
|
{ name = "nvim_lua" },
|
||||||
|
{ name = "copilot" },
|
||||||
|
{ name = "luasnip" },
|
||||||
|
{ name = "buffer" },
|
||||||
|
{ name = "path" },
|
||||||
|
},
|
||||||
|
confirm_opts = {
|
||||||
|
behavior = cmp.ConfirmBehavior.Replace,
|
||||||
|
select = false,
|
||||||
|
},
|
||||||
|
experimental = {
|
||||||
|
ghost_text = false,
|
||||||
|
native_menu = false,
|
||||||
|
},
|
||||||
|
cmp.config.window.bordered()
|
||||||
|
}
|
6
evelyne/common/neovim/spell/en.utf-8.add
Normal file
6
evelyne/common/neovim/spell/en.utf-8.add
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
macOS
|
||||||
|
JS
|
||||||
|
add evelyne
|
||||||
|
evelyne
|
||||||
|
camhs
|
||||||
|
Vernova
|
BIN
evelyne/common/neovim/spell/en.utf-8.add.spl
Normal file
BIN
evelyne/common/neovim/spell/en.utf-8.add.spl
Normal file
Binary file not shown.
16
evelyne/common/nsxiv.nix
Normal file
16
evelyne/common/nsxiv.nix
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
nsxiv
|
||||||
|
];
|
||||||
|
xdg.configFile."nsxiv" = {
|
||||||
|
source = ./nsxiv;
|
||||||
|
};
|
||||||
|
xresources.properties = {
|
||||||
|
"Nsxiv.window.foreground" = "#D6DEEB";
|
||||||
|
"Nsxiv.window.background" = "#1E2127";
|
||||||
|
"Nsxiv.bar.background" = "#2C323D";
|
||||||
|
"Nsxiv.bar.foreground" = "#D6DEEB";
|
||||||
|
};
|
||||||
|
}
|
14
evelyne/common/nsxiv/exec/key-handler
Executable file
14
evelyne/common/nsxiv/exec/key-handler
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
while read file
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
"d")
|
||||||
|
rm -rf $file ;;
|
||||||
|
"r")
|
||||||
|
convert -rotate 90 "$file" "$file" ;;
|
||||||
|
"y")
|
||||||
|
echo -n "$file" | xclip -selection clipboard ;;
|
||||||
|
"w")
|
||||||
|
xwallpaper --zoom "$file" && kill $(pidof nsxiv);;
|
||||||
|
esac
|
||||||
|
done
|
5
evelyne/common/obs-studio.nix
Normal file
5
evelyne/common/obs-studio.nix
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.obs-studio.enable = true;
|
||||||
|
}
|
12
evelyne/common/office.nix
Normal file
12
evelyne/common/office.nix
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
texlive.combined.scheme-full # LaTeX
|
||||||
|
libreoffice # Documents suite
|
||||||
|
thunderbird # Email client
|
||||||
|
obsidian # Notes app
|
||||||
|
sc-im # TUI spreadsheet
|
||||||
|
anki # Flashcard app
|
||||||
|
];
|
||||||
|
}
|
14
evelyne/common/passwords.nix
Normal file
14
evelyne/common/passwords.nix
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.password-store = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
PASSWORD_STORE_DIR = "${config.xdg.dataHome}/password-store";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionVariables = {
|
||||||
|
PASSWORD_STORE_DIR = "${config.xdg.dataHome}/password-store";
|
||||||
|
};
|
||||||
|
}
|
11
evelyne/common/pcmanfm.nix
Normal file
11
evelyne/common/pcmanfm.nix
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
pcmanfm
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg.configFile."pcmanfm" = {
|
||||||
|
source = ./pcmanfm;
|
||||||
|
};
|
||||||
|
}
|
26
evelyne/common/pcmanfm/default/pcmanfm.conf
Normal file
26
evelyne/common/pcmanfm/default/pcmanfm.conf
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[config]
|
||||||
|
bm_open_method=0
|
||||||
|
|
||||||
|
[volume]
|
||||||
|
mount_on_startup=1
|
||||||
|
mount_removable=1
|
||||||
|
autorun=1
|
||||||
|
|
||||||
|
[ui]
|
||||||
|
always_show_tabs=0
|
||||||
|
max_tab_chars=32
|
||||||
|
win_width=1000
|
||||||
|
win_height=696
|
||||||
|
splitter_pos=189
|
||||||
|
media_in_new_tab=0
|
||||||
|
desktop_folder_new_win=0
|
||||||
|
change_tab_on_drop=1
|
||||||
|
close_on_unmount=1
|
||||||
|
focus_previous=0
|
||||||
|
side_pane_mode=places
|
||||||
|
view_mode=list
|
||||||
|
show_hidden=0
|
||||||
|
sort=name;descending;
|
||||||
|
toolbar=newtab;navigation;home;
|
||||||
|
show_statusbar=1
|
||||||
|
pathbar_mode_buttons=0
|
25
evelyne/common/picom.nix
Normal file
25
evelyne/common/picom.nix
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.file.".xinitrc".text = ''
|
||||||
|
# Import xorg environment into systemd for the picom service to work
|
||||||
|
systemctl --user import-environment XAUTHORITY DISPLAY &
|
||||||
|
|
||||||
|
# Restart picom after importing the xorg environment
|
||||||
|
systemctl --user restart picom &
|
||||||
|
'';
|
||||||
|
services.picom = {
|
||||||
|
enable = true;
|
||||||
|
fade = true;
|
||||||
|
fadeSteps = [
|
||||||
|
0.1
|
||||||
|
0.1
|
||||||
|
];
|
||||||
|
opacityRules = [
|
||||||
|
"90:class_g = 'st-256color'"
|
||||||
|
"90:class_g = 'tabbed-trans'"
|
||||||
|
];
|
||||||
|
shadow = true;
|
||||||
|
vSync = true;
|
||||||
|
};
|
||||||
|
}
|
8
evelyne/common/processes.nix
Normal file
8
evelyne/common/processes.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
xorg.xkill # Kill X11 programs with mouse
|
||||||
|
killall # Kill programs
|
||||||
|
];
|
||||||
|
}
|
11
evelyne/common/qt.nix
Normal file
11
evelyne/common/qt.nix
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
qt = {
|
||||||
|
enable = true;
|
||||||
|
style = {
|
||||||
|
package = pkgs.adwaita-qt;
|
||||||
|
name = "adwaita-dark";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
15
evelyne/common/rust.nix
Normal file
15
evelyne/common/rust.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
rustup
|
||||||
|
];
|
||||||
|
|
||||||
|
home = {
|
||||||
|
sessionVariables = {
|
||||||
|
CARGO_HOME = "${config.xdg.dataHome}/cargo";
|
||||||
|
RUSTUP_HOME = "${config.xdg.dataHome}/rustup";
|
||||||
|
};
|
||||||
|
sessionPath = [ "${config.home.sessionVariables.CARGO_HOME}/bin" ];
|
||||||
|
};
|
||||||
|
}
|
13
evelyne/common/screenshot.nix
Normal file
13
evelyne/common/screenshot.nix
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
tesseract5 # Gets text from images
|
||||||
|
maim # X11 screenshot tool
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/sss" = {
|
||||||
|
source = ./screenshot/sss.sh;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
}
|
40
evelyne/common/screenshot/sss.sh
Normal file
40
evelyne/common/screenshot/sss.sh
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# Configuration variables
|
||||||
|
SST_PIC_DIR="$HOME/Pictures/Screenshots"
|
||||||
|
|
||||||
|
while getopts "sctd:" options; do
|
||||||
|
case $options in
|
||||||
|
s)
|
||||||
|
echo "sswm: save mode"
|
||||||
|
name=$(date --iso-8601=minutes)
|
||||||
|
maim -s -u -f png > $SST_PIC_DIR/$name.png
|
||||||
|
echo "sswm: imaged saved as $SST_PIC_DIR/$name.png"
|
||||||
|
;;
|
||||||
|
c)
|
||||||
|
echo "sswm: copy mode"
|
||||||
|
maim -s -u -f png | xclip -selection clipboard -t image/png
|
||||||
|
echo "sswm: image copied to clipboard"
|
||||||
|
;;
|
||||||
|
t)
|
||||||
|
echo "sswm: text mode"
|
||||||
|
maim -s -u -f png "$IMAGE"
|
||||||
|
[ $? -ne 0 ] && exit 1
|
||||||
|
|
||||||
|
tesseract "$IMAGE" "${TEXT//\.txt/}" 2> /dev/null
|
||||||
|
sed -i 's/\x0c//' "$TEXT"
|
||||||
|
|
||||||
|
if [ $(wc -l < $TEXT) -eq 0 ]; then
|
||||||
|
echo "sswm: no text detected"
|
||||||
|
else
|
||||||
|
truncate -s -1 $TEXT
|
||||||
|
xclip -selection clipboard < "$TEXT"
|
||||||
|
echo "sswm: text copied to clipboard"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
echo "sswm: delay "$OPTARG"s..."
|
||||||
|
sleep $OPTARG
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
8
evelyne/common/secrets.nix
Normal file
8
evelyne/common/secrets.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.pass-secret-service = {
|
||||||
|
enable = true;
|
||||||
|
storePath = "${config.xdg.dataHome}/password-store";
|
||||||
|
};
|
||||||
|
}
|
61
evelyne/common/shell.nix
Normal file
61
evelyne/common/shell.nix
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home = {
|
||||||
|
# Aliases
|
||||||
|
shellAliases = {
|
||||||
|
# Core Programs
|
||||||
|
cp = "cp -iv";
|
||||||
|
mv = "mv -iv";
|
||||||
|
rm = "rm -vI";
|
||||||
|
mkd = "mkdir -pv";
|
||||||
|
c = "clear";
|
||||||
|
e = "exit";
|
||||||
|
|
||||||
|
# CLI Shortcuts
|
||||||
|
v = "nvim";
|
||||||
|
vi = "nvim";
|
||||||
|
ka = "killall";
|
||||||
|
xw = "xwallpaper";
|
||||||
|
nf = "neofetch";
|
||||||
|
tf = "pridefetch -f trans";
|
||||||
|
pf = "pfetch";
|
||||||
|
i = "inertia";
|
||||||
|
|
||||||
|
# System shortcuts
|
||||||
|
heif-convert-dir = "for file in *.heic; do heif-convert -q 100 $file \${file/%.heic/.jpg}; done";
|
||||||
|
unfuck-wifi = "doas systemctl restart wpa_supplicant.service";
|
||||||
|
cdt = "cd $(mktemp -d)";
|
||||||
|
sx = "startx ~/.config/x11/xinitrc";
|
||||||
|
sdn = "doas shutdown -h now";
|
||||||
|
kys = "kill $(pidof '$@')";
|
||||||
|
|
||||||
|
# Nix system shortucts
|
||||||
|
nix-system-update = "nix flake update $NIXFILES && doas nixos-rebuild switch --flake $NIXFILES";
|
||||||
|
|
||||||
|
# For colour
|
||||||
|
btop = "btop --utf-force";
|
||||||
|
grep = "grep --color=auto";
|
||||||
|
diff = "diff --color=auto";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
sessionVariables = {
|
||||||
|
# Locale
|
||||||
|
LANG = "en_GB.UTF-8";
|
||||||
|
LC_ALL = "en_GB.UTF-8";
|
||||||
|
|
||||||
|
# Define nixfiles location
|
||||||
|
NIXFILES = "$HOME/Development/Personal/NixFiles";
|
||||||
|
|
||||||
|
# Java windows
|
||||||
|
_JAVA_AWT_WM_NONREPARENTING = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Default $PATH
|
||||||
|
sessionPath = [
|
||||||
|
# Add ~/.local/bin to $PATH
|
||||||
|
"$HOME/.local/bin"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
21
evelyne/common/slstatus.nix
Normal file
21
evelyne/common/slstatus.nix
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
slstatus
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".xinitrc".text = ''
|
||||||
|
# Start slstatus
|
||||||
|
${pkgs.slstatus}/bin/slstatus &
|
||||||
|
'';
|
||||||
|
|
||||||
|
home.file.".local/bin/statusbar" = {
|
||||||
|
source = ./statusbar;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionPath = [
|
||||||
|
"$HOME/.local/bin/statusbar"
|
||||||
|
];
|
||||||
|
}
|
15
evelyne/common/ssh.nix
Normal file
15
evelyne/common/ssh.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{ config, pkgs, username, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# SSH
|
||||||
|
programs.ssh = {
|
||||||
|
enable = true;
|
||||||
|
matchBlocks = {
|
||||||
|
lambda = {
|
||||||
|
identityFile = "~/.ssh/id_ed25519";
|
||||||
|
hostname = "home.spyhoodle.me";
|
||||||
|
user = "evelyne";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
1
evelyne/common/ssh/id_ed25519.pub
Normal file
1
evelyne/common/ssh/id_ed25519.pub
Normal file
@ -0,0 +1 @@
|
|||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFMeYbc+IeL0nvIO98Ajlo8W73uDHv8t+SlIjbFqF1+Z retro@PogMachine
|
3
evelyne/common/statusbar/sb-clock
Executable file
3
evelyne/common/statusbar/sb-clock
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
echo " $(date "+%a %d %b") $(date "+%I:%M:%S%p")"
|
6
evelyne/common/statusbar/sb-cpu
Executable file
6
evelyne/common/statusbar/sb-cpu
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cpu=$(top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f\n", prefix, 100 - v }' | awk '{print int($0)}')
|
||||||
|
icon=""
|
||||||
|
|
||||||
|
echo "$icon $cpu%"
|
7
evelyne/common/statusbar/sb-disk
Executable file
7
evelyne/common/statusbar/sb-disk
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
disk=$(df -h "/" | awk ' /[0-9]/ {print $3 "/" $2}')
|
||||||
|
percent=$(df -h "/" | egrep -o '[0-9]+%' | awk '{print int($0)}')
|
||||||
|
icon=""
|
||||||
|
|
||||||
|
echo "$icon $disk"
|
35
evelyne/common/statusbar/sb-forecast
Executable file
35
evelyne/common/statusbar/sb-forecast
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Displays todays precipication chance (☔) and daily low (🥶) and high (🌞).
|
||||||
|
# Usually intended for the statusbar.
|
||||||
|
|
||||||
|
# If we have internet, get a weather report from wttr.in and store it locally.
|
||||||
|
# You could set up a shell alias to view the full file in a pager in the
|
||||||
|
# terminal if desired. This function will only be run once a day when needed.
|
||||||
|
weatherreport="${XDG_DATA_HOME:-$HOME/.local/share}/weatherreport"
|
||||||
|
getforecast() { curl -sf "wttr.in/$LOCATION" > "$weatherreport" || exit 1 ;}
|
||||||
|
|
||||||
|
# Some very particular and terse stream manipulation. We get the maximum
|
||||||
|
# precipitation chance and the daily high and low from the downloaded file and
|
||||||
|
# display them with coresponding emojis.
|
||||||
|
showweather() { printf "%s" "$(sed '16q;d' "$weatherreport" |
|
||||||
|
grep -wo "[0-9]*%" | sort -rn | sed "s/^/☔/g;1q" | tr -d '\n')"
|
||||||
|
sed '13q;d' "$weatherreport" | grep -o "m\\([-+]\\)*[0-9]\\+" | sed 's/+//g' | sort -n -t 'm' -k 2n | sed -e 1b -e '$!d' | tr '\n|m' ' ' | awk '{print " 🥶" $1 "°","🌞" $2 "°"}' ;}
|
||||||
|
|
||||||
|
case BLOCK_BUTTON in
|
||||||
|
1) setsid -f "$TERMINAL" -e less -Srf "$weatherreport" ;;
|
||||||
|
2) getforecast && showweather ;;
|
||||||
|
3) notify-send "🌈 Weather module" "\- Left click for full forecast.
|
||||||
|
- Middle click to update forecast.
|
||||||
|
☔: Chance of rain/snow
|
||||||
|
🥶: Daily low
|
||||||
|
🌞: Daily high" ;;
|
||||||
|
6) "$TERMINAL" -e "$EDITOR" "$0" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# The test if our forcecast is updated to the day. If it isn't download a new
|
||||||
|
# weather report from wttr.in with the above function.
|
||||||
|
[ "$(stat -c %y "$weatherreport" 2>/dev/null | cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ] ||
|
||||||
|
getforecast
|
||||||
|
|
||||||
|
showweather
|
10
evelyne/common/statusbar/sb-iplocate
Executable file
10
evelyne/common/statusbar/sb-iplocate
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Gets your public ip address checks which country you are in and
|
||||||
|
# displays that information in the statusbar
|
||||||
|
#
|
||||||
|
# https://www.maketecheasier.com/ip-address-geolocation-lookups-linux/
|
||||||
|
|
||||||
|
ifinstalled "geoip" || exit
|
||||||
|
addr="$(curl ifconfig.me 2>/dev/null)" || exit
|
||||||
|
grep "flag: " "${XDG_DATA_HOME:-$HOME/.local/share}/larbs/emoji" | grep "$(geoiplookup "$addr" | sed 's/.*, //')" | sed "s/flag: //;s/;.*//"
|
5
evelyne/common/statusbar/sb-kernel
Executable file
5
evelyne/common/statusbar/sb-kernel
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
kernel=$(uname -r)
|
||||||
|
icon=""
|
||||||
|
echo "$icon $kernel"
|
7
evelyne/common/statusbar/sb-memory
Executable file
7
evelyne/common/statusbar/sb-memory
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
mem=$(free --mebi | sed -n '2{p;q}' | awk '{printf ("%2.2f/%2.2f", ( $3 / 1024), ($2 / 1024))}')
|
||||||
|
percent=$(free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }' | awk '{print int($0)}')
|
||||||
|
icon=""
|
||||||
|
|
||||||
|
echo "$icon $mem""GB"
|
13
evelyne/common/statusbar/sb-temp
Executable file
13
evelyne/common/statusbar/sb-temp
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
temp=$(sensors | awk '/Core 0/ {print $3}' | awk '{print int($0)}')
|
||||||
|
|
||||||
|
if [ $temp -ge 70 ]; then
|
||||||
|
icon=""
|
||||||
|
elif [ $temp -ge 50 ]; then
|
||||||
|
icon=""
|
||||||
|
elif [ $temp -ge 0 ]; then
|
||||||
|
icon=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$icon $temp°C"
|
6
evelyne/common/statusbar/sb-uptime
Executable file
6
evelyne/common/statusbar/sb-uptime
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
uptime=$(uptime | awk '{print $3}' | sed 's/,//')
|
||||||
|
icon=""
|
||||||
|
|
||||||
|
echo "$icon $uptime"
|
15
evelyne/common/statusbar/sb-volume
Executable file
15
evelyne/common/statusbar/sb-volume
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
vol="$(pamixer --get-volume)"
|
||||||
|
|
||||||
|
if [ $(pamixer --get-mute) = true ]; then
|
||||||
|
icon=""
|
||||||
|
elif [ "$vol" -ge "50" ]; then
|
||||||
|
icon=""
|
||||||
|
elif [ "$vol" -gt "0" ]; then
|
||||||
|
icon=""
|
||||||
|
elif [ "$vol" -eq "0" ]; then
|
||||||
|
icon=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$icon $vol%"
|
13
evelyne/common/steam.nix
Normal file
13
evelyne/common/steam.nix
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
steam
|
||||||
|
steam-run
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/steam-killer" = {
|
||||||
|
source = ./steam/steam-killer.sh;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
}
|
9
evelyne/common/steam/steam-killer.sh
Executable file
9
evelyne/common/steam/steam-killer.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
echo "[sk] killing steamwebhelper"
|
||||||
|
{ kill $(pidof steamwebhelper) && echo "[fhs] killed!"; } || echo "[fhs] failed!"
|
||||||
|
echo "[sk] waiting 0.5 seconds..."
|
||||||
|
sleep 0.5
|
||||||
|
done
|
16
evelyne/common/tabbed.nix
Normal file
16
evelyne/common/tabbed.nix
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
tabbed
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/tabbed" = {
|
||||||
|
source = ./tabbed;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionPath = [
|
||||||
|
"$HOME/.local/bin/tabbed"
|
||||||
|
];
|
||||||
|
}
|
3
evelyne/common/tabbed/tabbed-st
Executable file
3
evelyne/common/tabbed/tabbed-st
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
picom-trans -w $(tabbed $@ -d -n "tabbed-trans" -r 2 st -w '') -o 90
|
9
evelyne/common/terminal.nix
Normal file
9
evelyne/common/terminal.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
cool-retro-term # Retro-style terminal
|
||||||
|
kitty # Used for testing
|
||||||
|
st # Suckless terminal
|
||||||
|
];
|
||||||
|
}
|
10
evelyne/common/tmux.nix
Normal file
10
evelyne/common/tmux.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.tmux = {
|
||||||
|
enable = true;
|
||||||
|
clock24 = true;
|
||||||
|
mouse = true;
|
||||||
|
terminal = "screen-256color";
|
||||||
|
};
|
||||||
|
}
|
7
evelyne/common/tor.nix
Normal file
7
evelyne/common/tor.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
tor-browser-bundle-bin
|
||||||
|
];
|
||||||
|
}
|
14
evelyne/common/wezterm.nix
Normal file
14
evelyne/common/wezterm.nix
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.wezterm = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = ''
|
||||||
|
return {
|
||||||
|
color_scheme = 'OneDark (base16)',
|
||||||
|
hide_tab_bar_if_only_one_tab = true,
|
||||||
|
window_close_confirmation = 'NeverPrompt'
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
73
evelyne/common/xdg.nix
Normal file
73
evelyne/common/xdg.nix
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
xdg-utils
|
||||||
|
xdg-user-dirs
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg = {
|
||||||
|
enable = true;
|
||||||
|
userDirs.enable = true;
|
||||||
|
desktopEntries = {
|
||||||
|
"browser" = {
|
||||||
|
name = "Web Browser";
|
||||||
|
type = "Application";
|
||||||
|
exec = "${pkgs.librewolf}/bin/librewolf %f";
|
||||||
|
};
|
||||||
|
"image" = {
|
||||||
|
name = "Image Viewer";
|
||||||
|
type = "Application";
|
||||||
|
exec = "${pkgs.nsxiv}/bin/nsxiv -a %f";
|
||||||
|
};
|
||||||
|
"text" = {
|
||||||
|
name = "Text Editor";
|
||||||
|
type = "Application";
|
||||||
|
exec = "${pkgs.st}/bin/st -e ${pkgs.neovim}/bin/nvim %u";
|
||||||
|
};
|
||||||
|
"pdf" = {
|
||||||
|
name = "PDF Reader";
|
||||||
|
type = "Application";
|
||||||
|
exec = "${pkgs.zathura}/bin/zathura %u";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mimeApps = {
|
||||||
|
enable = true;
|
||||||
|
defaultApplications = {
|
||||||
|
"application/pdf" = "pdf.desktop";
|
||||||
|
"x-scheme-handler/http" = "browser.desktop";
|
||||||
|
"x-scheme-handler/https" = "browser.desktop";
|
||||||
|
"image/png" = "image.desktop";
|
||||||
|
"image/jpeg" = "image.desktop";
|
||||||
|
"image/jpg" = "image.desktop";
|
||||||
|
"image/gif" = "image.desktop";
|
||||||
|
"video/mp4" = "mpv.desktop";
|
||||||
|
"text/plain" = "text.desktop";
|
||||||
|
"text/html" = "browser.desktop";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home = {
|
||||||
|
sessionVariables = {
|
||||||
|
# Force use of XDG Dir Spec
|
||||||
|
CUDA_CACHE_PATH = "${config.xdg.cacheHome}/nv";
|
||||||
|
LESSHISTFILE = "${config.xdg.configHome}/less/history";
|
||||||
|
LESSKEY = "${config.xdg.configHome}/less/keys";
|
||||||
|
WINEPREFIX = "${config.xdg.dataHome}/wine";
|
||||||
|
_JAVA_OPTIONS = "-Djava.util.prefs.userRoot=${config.xdg.configHome}/java";
|
||||||
|
|
||||||
|
# Default programs
|
||||||
|
EDITOR = "nvim";
|
||||||
|
TERMINAL = "st";
|
||||||
|
BROWSER = "librewolf";
|
||||||
|
};
|
||||||
|
|
||||||
|
shellAliases = {
|
||||||
|
# Force use of XDG Dir Spec
|
||||||
|
wget = "wget --hsts-file='${config.xdg.dataHome}/wget-hsts'";
|
||||||
|
rxrdb = "xrdb -load '${config.xdg.configHome}/.config/X11/xresources'";
|
||||||
|
nvidia-settings = "nvidia-settings --config='${config.xdg.configHome}'/nvidia/settings";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
66
evelyne/common/xorg.nix
Normal file
66
evelyne/common/xorg.nix
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Run startx on tty1
|
||||||
|
programs.zsh.profileExtra = ''
|
||||||
|
# If on /dev/tty1 then run startx automatically
|
||||||
|
if [ -z $DISPLAY ] && [ "$(tty)" = "/dev/tty1" ]; then
|
||||||
|
exec ${pkgs.xorg.xinit}/bin/startx
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Attempt to set keyboard layout
|
||||||
|
home.keyboard = {
|
||||||
|
layout = "gb";
|
||||||
|
options = [
|
||||||
|
"caps:escape"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Attempt to set cursor
|
||||||
|
home.pointerCursor = {
|
||||||
|
gtk.enable = true;
|
||||||
|
x11.enable = true;
|
||||||
|
package = pkgs.phinger-cursors;
|
||||||
|
name = "phinger-cursors";
|
||||||
|
size = 24;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Force use of XDG Dir Spec
|
||||||
|
home.sessionVariables = {
|
||||||
|
/* XAUTHORITY = "${config.xdg.runtimeDir}/Xauthority"; */
|
||||||
|
XCOMPOSECACHE = "${config.xdg.cacheHome}/x11/xcompose";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Install notify-send
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
libnotify
|
||||||
|
];
|
||||||
|
|
||||||
|
# Configure ~/.xinitrc
|
||||||
|
programs.feh.enable = true;
|
||||||
|
home.file.".xinitrc".text = ''
|
||||||
|
# Monitor configuration
|
||||||
|
${pkgs.xorg.xrandr}/bin/xrandr --output DP-0 --primary --mode 2560x1440 --pos 0x560
|
||||||
|
${pkgs.xorg.xrandr}/bin/xrandr --output HDMI-0 --noprimary --mode 2560x1440 --pos 2560x0 --rotate right
|
||||||
|
|
||||||
|
# Apply wallpaper
|
||||||
|
${pkgs.feh}/bin/feh --no-fehbg --bg-fill "$HOME/Pictures/Wallpapers/hearts.png"
|
||||||
|
|
||||||
|
# Refresh xresources
|
||||||
|
${pkgs.xorg.xrdb}/bin/xrdb "$HOME/.Xresources"
|
||||||
|
|
||||||
|
# Speed up repeated keypresses
|
||||||
|
${pkgs.xorg.xset}/bin/xset r rate 300 50
|
||||||
|
|
||||||
|
# Set keyboard map and remap caps to escape
|
||||||
|
${pkgs.xorg.setxkbmap}/bin/setxkbmap -layout gb --option caps:escape
|
||||||
|
|
||||||
|
# Start the window manager
|
||||||
|
${pkgs.openssh}/bin/ssh-agent ${pkgs.dwm}/bin/dwm
|
||||||
|
'';
|
||||||
|
|
||||||
|
xresources.properties = {
|
||||||
|
"*.font" = "Iosevka:pixelsize=14:antialias=true:autohint=true";
|
||||||
|
};
|
||||||
|
}
|
5
evelyne/common/zathura.nix
Normal file
5
evelyne/common/zathura.nix
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.zathura.enable = true;
|
||||||
|
}
|
123
evelyne/common/zsh.nix
Normal file
123
evelyne/common/zsh.nix
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.zsh = {
|
||||||
|
# Use the zsh shell
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# Basic config settings
|
||||||
|
enableAutosuggestions = true;
|
||||||
|
enableCompletion = true;
|
||||||
|
enableSyntaxHighlighting = true;
|
||||||
|
autocd = true;
|
||||||
|
/* defaultKeymap = "vicmd"; */
|
||||||
|
dotDir = ".config/zsh";
|
||||||
|
history = {
|
||||||
|
size = 9999999;
|
||||||
|
expireDuplicatesFirst = true;
|
||||||
|
extended = true;
|
||||||
|
path = "${config.xdg.cacheHome}/zsh/history";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Zsh init extras
|
||||||
|
initExtra = ''
|
||||||
|
# Disable Ctrl-S to freeze terminal
|
||||||
|
stty stop undef
|
||||||
|
|
||||||
|
# Tab completion
|
||||||
|
zstyle ':completion:*' menu select # Use a menu
|
||||||
|
_comp_options+=(globdots) # Include hidden files
|
||||||
|
|
||||||
|
# Change cursor shape for different vi modes
|
||||||
|
export KEYTIMEOUT=1
|
||||||
|
function zle-keymap-select () {
|
||||||
|
case $KEYMAP in
|
||||||
|
vicmd) echo -ne '\e[1 q';; # block
|
||||||
|
viins|main) echo -ne '\e[5 q';; # beam
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
zle -N zle-keymap-select
|
||||||
|
zle-line-init() {
|
||||||
|
zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
|
||||||
|
echo -ne "\e[5 q"
|
||||||
|
}
|
||||||
|
zle -N zle-line-init
|
||||||
|
echo -ne '\e[5 q' # Use beam shape cursor on startup.
|
||||||
|
preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.starship = {
|
||||||
|
# Use the starship prompt
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
format = lib.concatStrings [
|
||||||
|
# Directory
|
||||||
|
"$directory"
|
||||||
|
|
||||||
|
# VCS
|
||||||
|
"$git_branch"
|
||||||
|
"$git_commit"
|
||||||
|
"$git_state"
|
||||||
|
"$git_metrics"
|
||||||
|
"$git_status"
|
||||||
|
"$hg_branch"
|
||||||
|
|
||||||
|
# Languages
|
||||||
|
"$package"
|
||||||
|
"$c"
|
||||||
|
"$rust"
|
||||||
|
"$golang"
|
||||||
|
"$haskell"
|
||||||
|
"$python"
|
||||||
|
"$java"
|
||||||
|
"$kotlin"
|
||||||
|
"$lua"
|
||||||
|
"$dart"
|
||||||
|
"$nim"
|
||||||
|
"$nodejs"
|
||||||
|
"$swift"
|
||||||
|
"$zig"
|
||||||
|
"$nix_shell"
|
||||||
|
"$conda"
|
||||||
|
"$spack"
|
||||||
|
|
||||||
|
# Prompt line
|
||||||
|
"$line_break"
|
||||||
|
"$username"
|
||||||
|
"$hostname"
|
||||||
|
"$localip"
|
||||||
|
"$cmd_duration"
|
||||||
|
"$memory_usage"
|
||||||
|
"$jobs"
|
||||||
|
"$character"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Prompt character
|
||||||
|
character = {
|
||||||
|
success_symbol = "-> [λ](bold purple)";
|
||||||
|
error_symbol = "-> [λ](bold red)";
|
||||||
|
vimcmd_symbol = "-> [λ](bold green)";
|
||||||
|
};
|
||||||
|
|
||||||
|
# When in a deep directory or git repo
|
||||||
|
directory.truncation_symbol = ".../";
|
||||||
|
|
||||||
|
# Git widgets
|
||||||
|
git_metrics.disabled = false;
|
||||||
|
git_status = {
|
||||||
|
ahead = "->";
|
||||||
|
behind = "<-";
|
||||||
|
diverged = "<->";
|
||||||
|
renamed = ">>";
|
||||||
|
deleted = "x";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable other starship widgets
|
||||||
|
memory_usage.disabled = false;
|
||||||
|
localip.disabled = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
62
flake.lock
Normal file
62
flake.lock
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"utils": "utils"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1679480702,
|
||||||
|
"narHash": "sha256-npuRD61YmxUPitI1TqKwlxLrU6iGl5E+BPT196LgUDo=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "363c46b2480f1b73ec37cf68caac61f5daa82a2e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1679614379,
|
||||||
|
"narHash": "sha256-2KddLHHmcIlJu0PuS/vISLKxihTyICUwKWGn0R//028=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "994e2ef9e9c70b4dd7257f73452a94e871723685",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1676283394,
|
||||||
|
"narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
40
flake.nix
Normal file
40
flake.nix
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
description = "Evelyne's NixOS configurations";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
# Home manager
|
||||||
|
home-manager.url = "github:nix-community/home-manager";
|
||||||
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, home-manager }:
|
||||||
|
let
|
||||||
|
username = "retro";
|
||||||
|
utils = import ./utils nixpkgs;
|
||||||
|
|
||||||
|
nixpkgs_x86_64 = import nixpkgs {
|
||||||
|
config.allowUnfree = true;
|
||||||
|
config.allowUnsupportedSystem = false;
|
||||||
|
config.allowBroken = false;
|
||||||
|
overlays = import ./overlays.nix;
|
||||||
|
system = "x86_64-linux";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
nixosConfigurations."PogMachine" = nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = { inherit username; };
|
||||||
|
pkgs = nixpkgs_x86_64;
|
||||||
|
system = "x86_64-linux";
|
||||||
|
modules = [
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager.users.${username}.imports = utils.nixFilesIn ./evelyne/common;
|
||||||
|
home-manager.extraSpecialArgs = { inherit username; pkgs = nixpkgs_x86_64; };
|
||||||
|
}
|
||||||
|
] ++ utils.nixFilesIn ./systems/pogmachine;
|
||||||
|
};
|
||||||
|
|
||||||
|
formatter.x86_64-linux = nixpkgs_x86_64.legacyPackages.x86_64-linux.nixpkgs-fmt;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
62
overlays.nix
Normal file
62
overlays.nix
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
[
|
||||||
|
# My build of suckless dwm
|
||||||
|
(final: prev: {
|
||||||
|
dwm = prev.dwm.overrideAttrs (oldAttrs: {
|
||||||
|
src = final.fetchFromGitHub {
|
||||||
|
owner = "RetroEvelyne";
|
||||||
|
repo = "dwm";
|
||||||
|
rev = "0409fc4967bbe2b15dd8dc83e8e5c2d1bff41c1d";
|
||||||
|
sha256 = "sha256-EqzueCxJ+yCzKp5INV5Op/znoZYWmqMbcpcVuo8ddnQ=";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
st = prev.st.overrideAttrs (oldAttrs: {
|
||||||
|
src = final.fetchFromGitHub {
|
||||||
|
owner = "RetroEvelyne";
|
||||||
|
repo = "st";
|
||||||
|
rev = "45efc73331df1c5877e3c6e75a879780bb84504e";
|
||||||
|
sha256 = "sha256-D0YmbURDyTW5qzNZjIIwlWOHr5j8kenggSQ8GxhuLKo=";
|
||||||
|
};
|
||||||
|
buildInputs = oldAttrs.buildInputs ++ [ final.harfbuzz ];
|
||||||
|
});
|
||||||
|
dmenu = prev.dmenu.overrideAttrs (oldAttrs: {
|
||||||
|
src = final.fetchFromGitHub {
|
||||||
|
owner = "RetroEvelyne";
|
||||||
|
repo = "dickmenu";
|
||||||
|
rev = "34073a1a7de2b6f23909154d4425355a04a63f16";
|
||||||
|
sha256 = "sha256-JqM6fecuV6ObsPPQQub3WY2dZp2rWcX9u3EqYmhG8WI=";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
slstatus = prev.slstatus.overrideAttrs (oldAttrs: {
|
||||||
|
src = final.fetchFromGitHub {
|
||||||
|
owner = "SpyHoodle";
|
||||||
|
repo = "slstatus";
|
||||||
|
rev = "b22f3d8ec8e2d67bbd32f02721d9d8157a46edd4";
|
||||||
|
sha256 = "sha256-OhssKVQArcQAgCavkFaCRvxUM3689t1v3YCv9IW7osU=";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
slock = prev.slock.overrideAttrs (oldAttrs: {
|
||||||
|
src = final.fetchFromGitHub {
|
||||||
|
owner = "SpyHoodle";
|
||||||
|
repo = "slock";
|
||||||
|
rev = "8c5d321b641961237f747d3e68f52b163d673634";
|
||||||
|
sha256 = "sha256-y+6VU3jXbUOyhUcyPC7CDGjyWLSJcCkhYiHscVib7j4=";
|
||||||
|
};
|
||||||
|
buildInputs = oldAttrs.buildInputs ++ [ final.xorg.libXpm ];
|
||||||
|
});
|
||||||
|
tabbed = prev.tabbed.overrideAttrs (oldAttrs: {
|
||||||
|
src = final.fetchFromGitHub {
|
||||||
|
owner = "SpyHoodle";
|
||||||
|
repo = "tabbed";
|
||||||
|
rev = "1001f193fd076cba12bd1ec9f113c144b37d8689";
|
||||||
|
sha256 = "sha256-M5LrFplGfzCdhLTutsPNmox69brvAm2BlXnyza9kGxQ=";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
ncmpcpp = prev.ncmpcpp.override {
|
||||||
|
visualizerSupport = true;
|
||||||
|
clockSupport = false;
|
||||||
|
};
|
||||||
|
nerdfonts = prev.nerdfonts.override {
|
||||||
|
fonts = [ "Iosevka" "JetBrainsMono" "Terminus" ];
|
||||||
|
};
|
||||||
|
})
|
||||||
|
]
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user