nix-setup/home.nix
2026-06-05 22:49:58 +02:00

749 lines
21 KiB
Nix

{ lib, pkgs, ... }:
let
sources = import ./npins;
home-manager-src = sources.home-manager;
in
{
imports = [
(import "${home-manager-src}/nixos")
];
users.users.tudbut.packages = with pkgs; [
pdfarranger
thunderbird
tree
keepassxc
sshfs
arc-theme
signal-desktop
gimp
yt-dlp
mpv
# ( mpv-unwrapped.wrapper { mpv = mpv-unwrapped.override { ffmpeg = ffmpeg-full; }; } )
graphviz
giac-with-xcas
sqlite-interactive
acpi
nix-init
hydra-check
mate.eom
jdt-language-server
pcmanfm
filezilla
tree-sitter
gnome-network-displays
prismlauncher
prusa-slicer
evcxr
tcpdump
hyfetch
libreoffice
nushell
testdisk
bb
elixir-ls
elixir
doggo
scc
typst
nmap
qpaeq
dig
arp-scan
masscan
arduino
patchelf
eudev
audacity
android-tools
mupdf
evince
fzf
xorg.xmessage
arandr
iw
poppler-utils
pv
ghostscript
xorg.xkill
ocrmypdf
# picocom
speedtest-rs
uv
jq
ollama
wireshark
aircrack-ng
httrack
# httraqt # broken
gcc
ripgrep
file
tigervnc
nix-index
mono
jetbrains.idea
rofi
wofi
redshift
kdePackages.kate
caddy
# vesktop
tor-browser
deltachat-desktop
nixd
alsa-utils
binwalk
libwacom
libinput
dua
monero-gui
p2pool
syncplay
mold
openhantek6022
clipqr
python3
appimage-run
aria2
powertop
xhost
brasero
kdePackages.k3b
dvdplusrwtools
libburn
cdrtools
ddrescue
sysstat
udftools
fd
television
kdePackages.ktorrent
unflac
# opensnitch-ui
libburn
dvdbackup
vlc
regname
npins
android-studio
xev
traceroute
onefetch
tio
screen
swaybg
drawio
dotnet-runtime
rawtherapee
mcstatus
ghidra
perf
hotspot
tauon
picard
xclip
wl-clipboard
geeqie
picocom
luanti
telegram-desktop
kdePackages.akregator
librewolf
qtox
cava
deno
opustags
lame
unison
protonup-rs
smartmontools
hdparm
xpra
#marker.pkgs.end#
(pkgs.callPackage ./traewelling.script.nix {})
(pkgs.callPackage ./metronom-login.script.nix {})
(pkgs.callPackage ./plans.script.nix {})
(pkgs.callPackage ./todos.script.nix {})
(pkgs.callPackage ./plans-backend.script.nix {})
(pkgs.callPackage ./typedit.script.nix {})
(pkgs.callPackage ./fan.script.nix {})
(pkgs.callPackage ./fuckingfastdl.script.nix {})
(pkgs.callPackage ({pkgs}: pkgs.writeShellScriptBin "workmode" ./workmode.sh) {})
(pkgs.callPackage ./packages/recaf-launcher.nix {})
(pkgs.callPackage ./packages/cubyz-fhs.nix {})
(pkgs.callPackage ./packages/stackwallet.nix {})
(pkgs.callPackage ./packages/biglybt.nix {})
(pkgs.callPackage ./packages/aranet4linux.nix {})
(pkgs.callPackage ./packages/intellij-idea-2021.nix {})
(pkgs.callPackage ./packages/intellij-idea-2022.nix {})
(pkgs.callPackage ./packages/intellij-idea-2023.nix {})
(pkgs.writeShellScriptBin "typesorter" "${./typesorter.sh} \"$@\"")
(pkgs.writeShellScriptBin "pipette" "${xcolor}/bin/xcolor | ${xclip}/bin/xclip -selection clipboard")
(pkgs.writeShellScriptBin "timeprogress" "${nushell}/bin/nu ${./timeprogress.nu} \"$@\"")
(pkgs.writeShellScriptBin "vncserve" "xrandr -s $1 --output $(xrandr --listactivemonitors | tail -n1 | sed -E \"s/.* (.*)/\\1/g\") --scale-from $1 && ${tigervnc}/bin/x0vncserver -PasswordFile ~/.config/tigervnc/passwd -AcceptSetDesktopSize false")
(pkgs.writeShellScriptBin "dbat" "${libnotify}/bin/notify-send Battery \"$(cat /sys/class/power_supply/BAT*/capacity | ${coreutils}/bin/tr '\\n' ' ') $((($(cat /sys/class/power_supply/BAT*/power_now | tr '\\n' +) 0) / 1000))mW\"")
(pkgs.writeShellScriptBin "nx" "${libnotify}/bin/notify-send Output \"$(\"$@\")\"")
] ++ (with pkgs; [
# deadd-notification-center
dunst
qemu
qemu-user
freecad
# nheko
# cinny-desktop
olm
# mkchromecast # broken
feh
geogebra
jetbrains-toolbox
steam
# ventoy # unsafe
]);
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
};
users.users.amoeba.packages = with pkgs; [
micro
helix
vim
];
systemd.user.services.rawkeybinds = {
enable = true;
script = ''
sleep 2
for it in \
${pkgs.xorg.xmodmap}/bin \
${pkgs.xorg.xinput}/bin \
${pkgs.xclip}/bin \
${pkgs.libnotify}/bin \
${pkgs.actkbd}/bin \
${pkgs.xdotool}/bin \
${pkgs.maim}/bin \
; do
export PATH="$PATH:$it"
done
echo $PATH
pids=""
for dev in /dev/input/event* ; do
/run/wrappers/bin/sudo actkbd -x -d $dev -c ${./rawkeybinds.actkbd.conf} &
pids="$pids $!"
done
while kill -0 $pids ; do sleep 1 ; done
'';
wantedBy = [
"graphical-session.target"
];
};
systemd.user.services.caddy = {
enable = true;
script = ''
sleep 2
for it in \
${pkgs.caddy}/bin \
${pkgs.bash}/bin \
${pkgs.python3}/bin \
${pkgs.screen}/bin \
; do
export PATH="$PATH:$it"
done
echo $PATH
mkdir ~/caddy || true
cd ~/caddy
touch Caddyfile
[ -e prestart.sh ] && bash prestart.sh
/run/wrappers/bin/sudo caddy run
'';
wantedBy = [
"graphical-session.target"
];
};
systemd.user.services.usbsound = {
enable = true;
script = ''
sleep 2
for it in \
${pkgs.bash}/bin \
${pkgs.mpv}/bin \
${pkgs.usbutils}/bin \
${pkgs.diffutils}/bin \
; do
export PATH="$PATH:$it"
done
echo $PATH
bash /etc/nixos/usbsound/usbsound.sh
'';
wantedBy = [
"graphical-session.target"
];
};
systemd.user.services.check_internet = {
enable = true;
script = ''
sleep 2
for it in \
${pkgs.iputils}/bin \
; do
export PATH="$PATH:$it"
done
echo $PATH
while true; do
touch .has_internet.tmp
ping -c1 -w1 217.160.249.125 > /dev/null && echo ipv4 >> .has_internet.tmp
ping -c1 -w1 2a01:239:2a7:7800::1 > /dev/null && echo ipv6 >> .has_internet.tmp
mv .has_internet{.tmp,}
done
'';
wantedBy = [
"graphical-session.target"
];
};
home-manager.backupFileExtension = ".hm-old";
home-manager.users.tudbut = {
programs.home-manager.enable = true;
/* The home.stateVersion option does not have a default and must be set */
home.stateVersion = "24.05";
home.sessionVariables.MOZ_USE_XINPUT2 = "1";
programs.fish.enable = true;
programs.fish.shellInit = ''
export PATH="$PATH:$HOME/.cargo/bin:$HOME/opt/bin"
export SPL_PATH="$HOME/gitshit/spl/spl"
export ISBPL_PATH="$HOME/gitshit/isbpl"
function mmgui
sudo modem-manager-gui & disown
exit
end
function jjci
jjc "$(cat)"
end
function jjc
echo "import java.io.BufferedReader; import java.io.InputStreamReader; public class _main { public static BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); public static void p(Object o) { System.out.println(o); } public static void main(String[] args) throws Exception { $argv ; } }" > _main.java
javac _main.java
java -cp . _main
rm _main.java _main.class
end
function jjjc
echo "import java.io.BufferedReader; import java.io.InputStreamReader; public class _main { public static BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); public static void p(Object o) { System.out.println(o); } public static void main(String[] args) throws Exception { $argv ; } }" > src/_main.java
jjj _main
rm src/_main.java
end
function jjj
mkdir src build lib res 2> /dev/null
pushd src
javac -cp "../lib" -d ../build $(find -type f)
popd
java -cp "build/:lib/:res/" $argv
end
function check-internet
if grep ipv4 ~/.has_internet > /dev/null
set_color brgreen
echo "> Internet (v4) is UP"
else
set_color red
echo "> Internet (v4) is DOWN (or slow)"
end
if grep ipv6 ~/.has_internet > /dev/null
set_color brgreen
echo "> Internet (v6) is UP"
else
set_color red
echo "> Internet (v6) is DOWN (or slow)"
end
set_color normal
end
if status is-interactive
alias cd=z
tv init fish | source
stty -echo
check-internet
if mount | grep ~/sync > /dev/null
# set_color magenta
# echo "> Plans from ~/sync/plans.txt:"
# set_color brmagenta
# cat ~/sync/plans.txt
# echo
# set_color blue
# echo "> Your TODOs from ~/sync/todo.txt:"
# set_color brblue
# cat ~/sync/todo.txt
set_color brgreen
echo "> Sync is mounted."
else
set_color red
echo "> Sync is not mounted."
end
echo
# check träwelling
# traewelling
# print bahn.expert links
set_color brblue
echo "> bahn.expert shortcuts"
set_color blue
echo "ALBG https://bahn.expert/Lüneburg"
echo "AH https://bahn.expert/Hamburg%20Hbf"
echo "AHST https://bahn.expert/Hamburg%20Holstenstraße"
echo
set_color normal
stty echo
end
function edit-todo
hx ~/sync/todo.txt
clear
exec $SHELL
end
function rx
clear
exec fish
end
function ytmusicdl
yt-dlp --audio-format mp3 -x -o "%(playlist_index)02d %(track,title)s" "$argv"
end
function ytmusicdls
yt-dlp --audio-format mp3 -x -o "%(artist,channel,uploader)s - %(track,title)s" "$argv"
end
function ytmusicdlh
yt-dlp --audio-format mp3 -x -o "%(track,title)s" "$argv"
end
function ssh-aws
ssh ubuntu@( ssh ubuntu@aws.tudbut.de curl -s ip.me )
end
function fish_greeting
echo
echo " $(set_color yellow)good evening $(set_color brgreen)$USER$(set_color yellow)."
echo " $(set_color brred)welcome to $hostname."
echo
end
alias fucking=sudo
alias nix-fish="nix-shell --command fish -p"
alias gitlog="git log --all --oneline --graph"
alias lnc="l --color=no"
function mkcd
mkdir "$argv"
cd "$argv"
end
'';
programs.alacritty.enable = true;
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
programs.zoxide.enable = true;
programs.zoxide.enableFishIntegration= true;
programs.zoxide.enableNushellIntegration = true;
/* Here goes the rest of your home-manager config, e.g. home.packages = [ pkgs.foo ]; */
xsession.enable = true;
xsession.initExtra = "clipit &";
xsession.windowManager.i3 = {
enable = true;
extraConfig = ''
exec --no-startup-id feh --bg-fill .background-image
exec --no-startup-id deadd-notification-center
exec --no-startup-id systemctl --user start start-autostart
exec --no-startup-id xmodmap -e 'keycode 118 = dead_greek NoSymbol NoSymbol'
'';
config = {
keybindings = lib.mkOptionDefault {
"XF86AudioMute" = "exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle";
"XF86AudioMicMute" = "exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle";
"XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%";
"XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%";
"XF86MonBrightnessUp" = "exec --no-startup-id bright up";
"XF86MonBrightnessDown" = "exec --no-startup-id bright down";
"Print" = "exec --no-startup-id maim -s screenshot.png && xclip -selection clipboard -target image/png screenshot.png";
"Mod4+Shift+Print" = "exec gimp --no-splash --no-data --no-fonts screenshot.png";
"Mod4+Mod1+q" = "exec sl";
"Mod4+p" = "exec killall -USR1 deadd-notification-center";
"Mod4+o" = "exec pcmanfm";
"Mod4+b" = "exec firefox";
"Mod1+Tab" = "exec rofi -show window";
"Mod4+c" = "focus parent";
"Mod4+x" = "focus child";
"Mod4+j" = "focus down";
"Mod4+k" = "focus up";
};
terminal = "alacritty";
modifier = "Mod4";
fonts.names = ["Fira Code" "DejaVu Sans Mono"];
fonts.size = 12.0;
colors = {
focused = {
border = "#E2007A";
background = "#E2007A";
text = "#000000";
indicator = "#E2007A";
childBorder = "#E2007A";
};
focusedInactive = {
border = "#333333";
background = "#5F676A";
text = "#FFFFFF";
indicator = "#484E50";
childBorder = "#5F676A";
};
unfocused = {
border = "#333333";
background = "#222222";
text = "#888888";
indicator = "#292D2E";
childBorder = "#222222";
};
urgent = {
border = "#2F343A";
background = "#FF0000";
text = "#000000";
indicator = "#FF0000";
childBorder = "#FF0000";
};
"placeholder" = {
border = "#000000";
background = "#0C0C0C";
text = "#FFFFFF";
indicator = "#000000";
childBorder = "#0C0C0C";
};
background = "#FFFFFF";
};
bars = [{
colors = {
background = "#000000";
statusline = "#FFFFFF";
separator = "#666666";
focusedWorkspace = {
border = "#E2007A";
background = "#E2007A";
text = "#000000";
};
activeWorkspace = {
border = "#333333";
background = "#222222";
text = "#FFFFFF";
};
inactiveWorkspace = {
border = "#333333";
background = "#222222";
text = "#888888";
};
urgentWorkspace = {
border = "#2F343A";
background = "#FF0000";
text = "#000000";
};
bindingMode = {
border = "#2F343A";
background = "#FF0000";
text = "#000000";
};
};
statusCommand = "${pkgs.i3status}/bin/i3status";
fonts = {
names = [ "Iosevka" "Fira Code" "DejaVu Sans Mono" ];
size = 12.0;
};
}];
defaultWorkspace = "workspace number 1";
gaps = {
inner = 0;
};
};
};
programs.i3status.enable = true;
programs.i3status.modules."cpu_temperature 0" = {
enable = true;
position = 6;
};
programs.i3status.modules."battery all".settings.format = "%status %percentage %remaining %emptytime %consumption";
programs.i3status.modules."battery all".settings.last_full_capacity = true;
services.picom.enable = true;
programs.alacritty.settings.window.opacity = 1;
programs.alacritty.settings.font.normal.family = "Monocraft";
programs.alacritty.settings.font.size = lib.mkDefault 9;
# programs.alacritty.settings.bell.duration = 100;
#services.dunst.enable = true;
gtk.enable = true;
gtk.theme = {
name = "Arc-Dark";
package = pkgs.arc-theme;
};
gtk.iconTheme = {
name = "Breeze-Dark";
package = pkgs.kdePackages.breeze-icons;
};
dconf.settings = {
"org/gnome/desktop/interface".color-scheme = "prefer-dark";
};
xdg.enable = true;
xdg.configFile."deadd/deadd.yml".text = ''
width: 600
notification:
popup:
default-timeout: 10000
'';
xdg.configFile."deadd/deadd.css".source = ./deadd.css;
xdg.configFile."tigervnc/default.tigervnc".text = ''
TigerVNC Configuration file Version 1.0
ServerName=pc.newinfra.tudbut.de:5900
SecurityTypes=None,VncAuth,RA2ne,RA2ne_256,Plain,DH,MSLogonII,TLSNone,TLSVnc,TLSPlain,X509None,X509Vnc,X509Plain,RA2,RA2_256
FullScreen=on
AlwaysCursor=on
SendClipboard=off
SendPrimary=off
FullColor=false
CompressLevel=9
PreferredEncoding=Tight
'';
programs.helix.enable = true;
programs.helix.defaultEditor = true;
programs.helix.settings = {
theme = "tudbut";
editor = {
line-number = "relative";
lsp.display-messages = true;
cursor-shape = {
insert = "bar";
};
cursorline = true;
end-of-line-diagnostics = "hint";
inline-diagnostics = {
cursor-line = "hint";
other-lines = "error";
};
bufferline = "always";
lsp.display-inlay-hints = false;
idle-timeout = 0;
completion-trigger-len = 1;
};
keys.normal = {
minus = "goto_previous_buffer";
"+" = "goto_next_buffer";
"#" = ":buffer-close";
G = "goto_file_end";
"0" = ":toggle-option lsp.display-inlay-hints";
"=" = ":toggle inline-diagnostics.other-lines error disable";
"ß" = ":toggle inline-diagnostics.cursor-line hint disable";
"}" = ":toggle end-of-line-diagnostics hint disable";
};
keys.normal.z.w = ":write";
keys.normal.g.f = "code_action";
};
programs.helix.themes.tudbut = {
inherits = "monokai_pro_ristretto";
"string.special.symbol" = { fg = "#5cdaa7"; };
"ui.gutter" = {
bg = "#322a2a"; # #2c2525 #352e2e
# fg = "#72696a";
};
};
# programs.helix.languages.language = [{
# name = "rust";
# language-servers = ["rust-analyzer"];
# }];
programs.helix.languages.language-server = {
rust-analyzer.config = {
check.command = "clippy";
};
};
programs.zed-editor = {
enable = true;
userSettings = {
show_edit_predictions = false;
telemetry = {
diagnostics = false;
};
helix_mode = true;
base_keymap = "VSCode";
ui_font_family = "Fira Sans";
buffer_font_family = "Fira Code";
ui_font_size = 15;
buffer_font_size = 13;
theme = {
mode = "dark";
dark = "Gruvbox Dark Hard";
light = "Gruvbox Light Hard";
};
"unstable.ui_density" = "compact";
auto_install_extensions = {
discord-presence = true;
};
format_on_save = "off";
};
userKeymaps = [
{
"context" = "Workspace";
"bindings" = {
"shift shift" = "file_finder::Toggle";
};
}
{
"context" = "Editor && vim_mode == helix_normal";
"bindings" = {
# "space a" = "editor::ToggleCodeActions";
# "space f" = "file_finder::Toggle";
# "space t" = "project_panel::ToggleFocus";
# "space c" = "terminal_panel::ToggleFocus";
"+" = "pane::ActivateNextItem";
"-" = "pane::ActivatePreviousItem";
# "x" = "vim::ToggleVisualLine";
# "ctrl-c" = "vim::ToggleComments";
};
}
# {
# context = "Editor && vim_mode == visual";
# bindings = {
# "x" = "vim::Down";
# "ctrl-c" = "vim::ToggleComments";
# };
# }
];
};
xdg.mimeApps.enable = true;
xdg.mimeApps.defaultApplications = {
"text/html" = "glinks.desktop";
"x-scheme-handler/http" = "glinks.desktop";
"x-scheme-handler/https" = "glinks.desktop";
"x-scheme-handler/about" = "glinks.desktop";
"x-scheme-handler/unknown" = "glinks.desktop";
};
xdg.desktopEntries.glinks = {
name="gLinks";
comment="Graphical links";
exec="links -g %U";
terminal=false;
type="Application";
categories=[ "Network" "WebBrowser" ];
mimeType = [ "text/html" "text/xml" ];
};
# services.opensnitch-ui = {
# enable = true;
# };
};
programs.obs-studio = {
enable = true;
enableVirtualCamera = true;
};
}