358 lines
8.1 KiB
Nix
358 lines
8.1 KiB
Nix
{ pkgs, config, lib, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
unstablePkgs = import <nixpkgs-unstable> { };
|
|
|
|
library = import <library> { inherit pkgs lib; };
|
|
|
|
allLicenses = let
|
|
licenses = builtins.map
|
|
(license: "echo '${license.shortName} : ${license.fullName}'")
|
|
(builtins.attrValues pkgs.stdenv.lib.licenses);
|
|
in pkgs.writers.writeBashBin "all-licenses"
|
|
(lib.concatStringsSep "\n" licenses);
|
|
|
|
zettlr = pkgs.writers.writeBashBin "zettlr" ''
|
|
if [[ ! -x "$HOME/programs/Zettlr.AppImage" ]]
|
|
then
|
|
echo "$HOME/programs/Zettlr.AppImage does not exist or is not executable";
|
|
exit 1
|
|
fi
|
|
exec ${pkgs.appimage-run}/bin/appimage-run "$HOME/programs/Zettlr.AppImage"
|
|
'';
|
|
#zettlr = unstablePkgs.zettlr;
|
|
|
|
parseUrl = pkgs.writeBashBin "parseUrl" ''
|
|
echo "$@" | \
|
|
${pkgs.jq}/bin/jq --raw-input --raw-output '
|
|
def parseURL: capture( "^((?<scheme>[^:/?#]+):)?(//(?<authority>(?<domain>[^/?#:]*)(:(?<port>[0-9]*))?))?((?<path>[^?#]*)\\?)?((?<query>([^#]*)))?(#(?<fragment>(.*)))?");
|
|
parseURL
|
|
'
|
|
'';
|
|
|
|
parseAndCopyLink = pkgs.writeBashBin "parseAndCopyLink" ''
|
|
${parseUrl}/bin/parseUrl "$@" | \
|
|
${pkgs.jq}/bin/jq --raw-output '"\(.scheme)://\(.domain)\(.path)"' | \
|
|
${pkgs.xclip}/bin/xclip
|
|
'';
|
|
|
|
replaceLinks = pkgs.writers.writeBashBin "replace-link-with-content" # sh
|
|
''
|
|
if [ ! -L "$1" ]
|
|
then
|
|
echo "$1 does not exist or is not a file"
|
|
exit 1
|
|
fi
|
|
|
|
cp -rL "$1" "$1.backup"
|
|
unlink "$1"
|
|
mv "$1.backup" "$1"
|
|
'';
|
|
|
|
pandocScript = inputFormat: outputFormat:
|
|
pkgs.writers.writeDashBin "pandoc-from-${inputFormat}-to-${outputFormat}" ''
|
|
${pkgs.pandoc}/bin/pandoc \
|
|
--from ${inputFormat} \
|
|
--to ${outputFormat} \
|
|
--standalone \
|
|
"$@"
|
|
'';
|
|
|
|
connectToSpeaker = name: id:
|
|
pkgs.writeShellScriptBin "connect-to-speaker-${name}" # sh
|
|
''
|
|
# hacky script because I have problems with
|
|
# automatically connecting to trusted bluetooth devices.
|
|
|
|
echo "Connect to Speaker ${name}"
|
|
|
|
bluetoothctl <<EOF
|
|
power on
|
|
agent on
|
|
scan on
|
|
connect ${id}
|
|
EOF
|
|
'';
|
|
|
|
disconnectToSpeaker = name: id:
|
|
pkgs.writeShellScriptBin "disconnect-from-speaker-${name}" # sh
|
|
''
|
|
# hacky script because I have problems with
|
|
# automatically connecting to trusted bluetooth devices.
|
|
|
|
echo "Disconnect from Speaker ${name}"
|
|
|
|
bluetoothctl <<EOF
|
|
disconnect ${id}
|
|
scan off
|
|
agent off
|
|
power off
|
|
EOF
|
|
'';
|
|
|
|
borrow = pkgs.writers.writeDashBin "borrow" # sh
|
|
''
|
|
${pkgs.hledger-ui}/bin/hledger-ui -f ~/finance/hledger-borrow "$@"
|
|
'';
|
|
|
|
bank = pkgs.writers.writeDashBin "bank" # sh
|
|
''
|
|
${pkgs.hledger-ui}/bin/hledger-ui -f ~/finance/hledger-bank "$@"
|
|
'';
|
|
|
|
irc = pkgs.writers.writeDashBin "irc" # sh
|
|
''
|
|
${pkgs.mosh}/bin/mosh workhorse.private -- sudo -u weechat -- screen -rd
|
|
'';
|
|
|
|
insertCopyq = pkgs.writers.writeDashBin "insertCopyq" # sh
|
|
''
|
|
${pkgs.copyq}/bin/copyq read 0 | ${pkgs.xdotool}/bin/xdotool type -f -
|
|
'';
|
|
|
|
weight = pkgs.writeShellScriptBin "weight" ''
|
|
if [[ $# -eq 1 ]]
|
|
then
|
|
weight=$1
|
|
echo "weight : $weight"
|
|
else
|
|
echo
|
|
echo -n " weight : "
|
|
read weight
|
|
fi
|
|
|
|
echo
|
|
|
|
${pkgs.curl}/bin/curl \
|
|
-H "Content-Type: application/json" \
|
|
-XPOST "http://workout.private:9200/health/weight" \
|
|
-d '{ "weight" : '$weight', "date": "'$( ${pkgs.coreutils}/bin/date -Iseconds )'" }'
|
|
'';
|
|
|
|
in {
|
|
|
|
# ffmpeg scripts to encode movies
|
|
programs.custom.ffmpeg.enable = true;
|
|
|
|
# gnupg setup
|
|
programs.gnupg.agent.enable = true;
|
|
programs.gnupg.agent.enableSSHSupport = true;
|
|
programs.gnupg.agent.enableExtraSocket = true;
|
|
|
|
environment.systemPackages = with pkgs;
|
|
let
|
|
connectToMyPortable = connectToSpeaker "my-portable" "37:F0:17:2F:B6:84";
|
|
disconnectToMyPortable =
|
|
disconnectToSpeaker "my-portable" "37:F0:17:2F:B6:84";
|
|
connectToBrullrohre = connectToSpeaker "brullrohre" "FC:A8:9A:ED:B8:FA";
|
|
disconnectToBrullrohre =
|
|
disconnectToSpeaker "brullrohre" "FC:A8:9A:ED:B8:FA";
|
|
in [
|
|
|
|
zettlr
|
|
zim
|
|
|
|
weight
|
|
|
|
connectToMyPortable
|
|
(library.desktopFile connectToMyPortable { longName = "Bluetooth"; })
|
|
disconnectToMyPortable
|
|
(library.desktopFile disconnectToMyPortable { longName = "Bluetooth"; })
|
|
connectToBrullrohre
|
|
(library.desktopFile connectToBrullrohre { longName = "Bluetooth"; })
|
|
disconnectToBrullrohre
|
|
(library.desktopFile disconnectToBrullrohre { longName = "Bluetooth"; })
|
|
|
|
#antimony
|
|
#(library.desktopFile antimony { longName = "CAD Software"; command = "antimony"; })
|
|
parted
|
|
|
|
insertCopyq
|
|
(library.desktopFile insertCopyq {
|
|
longName = "type what is on top of the copyq";
|
|
command = "insertCopyq";
|
|
})
|
|
|
|
bank
|
|
borrow
|
|
|
|
irc
|
|
|
|
manpages
|
|
|
|
emo
|
|
(library.desktopFile emo {
|
|
longName = "Emoji Inserter";
|
|
command = "emoticons";
|
|
})
|
|
|
|
bat
|
|
|
|
zlib # ???
|
|
cabal-install
|
|
ghc
|
|
cabal2nix
|
|
|
|
psmisc # contains killall
|
|
pmount
|
|
nix-prefetch-scripts
|
|
ipcalc
|
|
nmap
|
|
|
|
libreoffice
|
|
hunspell
|
|
hunspellDicts.de-de
|
|
hunspellDicts.en-us
|
|
aspell
|
|
aspellDicts.de
|
|
aspellDicts.en
|
|
aspellDicts.es
|
|
translate-shell
|
|
|
|
borgbackup
|
|
gpa
|
|
gnupg
|
|
|
|
sshuttle
|
|
sshfs
|
|
mosh
|
|
|
|
dosfstools
|
|
copyq
|
|
|
|
# radio-dj
|
|
|
|
cups
|
|
xfe # filemanager
|
|
evince
|
|
sxiv
|
|
(library.desktopFile sxiv {
|
|
longName = "Image Viewer";
|
|
command = "sxiv";
|
|
})
|
|
|
|
calibre
|
|
|
|
transmission-remote-gtk
|
|
mpv
|
|
# cantata
|
|
ncmpcpp
|
|
|
|
(pkgs.dragon-drop.overrideAttrs (old: rec {
|
|
pname = "dragon-drop";
|
|
version = "1.1.1";
|
|
src = fetchFromGitHub {
|
|
owner = "mwh";
|
|
repo = "dragon";
|
|
rev = "v${version}";
|
|
sha256 = "0fgzz39007fdjwq72scp0qygp2v3zc5f1xkm0sxaa8zxm25g1bra";
|
|
};
|
|
}))
|
|
|
|
dino # jabber client
|
|
|
|
nixos-generators
|
|
shellcheck
|
|
|
|
bind.dnsutils
|
|
|
|
hexyl
|
|
testssl
|
|
|
|
trash-cli
|
|
|
|
nix-review
|
|
units
|
|
|
|
(writeShellScriptBin "ingdiba-security" ''
|
|
first=$1
|
|
second=$2
|
|
|
|
if [[ $# -ne 2 ]]
|
|
then
|
|
echo "need 2 arguments"
|
|
exit 1
|
|
fi
|
|
|
|
pass bank/ingdiba/security_key | cut -c$first,$second
|
|
'')
|
|
|
|
(writeShellScriptBin "ingdiba-tans" ''
|
|
first=$1
|
|
|
|
if [[ $# -ne 1 ]]
|
|
then
|
|
echo "need 1 arguments"
|
|
exit 1
|
|
fi
|
|
|
|
pass bank/ingdiba/tans-01 | cut -f$first -d '
|
|
'
|
|
'')
|
|
|
|
nix-index
|
|
|
|
nethogs
|
|
netsniff-ng
|
|
iftop
|
|
wireguard
|
|
|
|
ffmpeg
|
|
(writeShellScriptBin "shrink-exports"
|
|
(fileContents <assets/shrink_exports>))
|
|
(writeShellScriptBin "music-making"
|
|
(fileContents <assets/music-making.sh>))
|
|
|
|
replaceLinks
|
|
|
|
image-generator
|
|
cairo
|
|
|
|
w3m
|
|
links
|
|
lynx
|
|
|
|
# temperature
|
|
s-tui
|
|
(pkgs.writers.writeDashBin "temperature" ''
|
|
${pkgs.s-tui}/bin/s-tui
|
|
'')
|
|
powertop
|
|
|
|
(pkgs.writers.writeBashBin "youtube-download-music" ''
|
|
${pkgs.youtube-dl}/bin/youtube-dl \
|
|
--extract-audio \
|
|
--audio-format vorbis \
|
|
--audio-quality 0 \
|
|
"$@"
|
|
'')
|
|
|
|
allLicenses
|
|
|
|
memo
|
|
nixfmt
|
|
dateutils
|
|
parseUrl
|
|
parseAndCopyLink
|
|
|
|
# needed for pycairo (in venv)
|
|
pkgconf
|
|
cairo
|
|
|
|
# etc-info stuff
|
|
(pkgs.writers.writeDashBin "etc-info-sync" (lib.concatStringsSep "\n"
|
|
(map (host: "rsync -avLz ${host}.private:/etc/info/ ~/.etc_info")
|
|
(attrNames config.module.cluster.services.tinc."private".hosts))))
|
|
|
|
] ++ (lib.crossLists pandocScript [
|
|
[ "man" "markdown" "mediawiki" ]
|
|
[ "mediawiki" "docbook5" "html5" "man" ]
|
|
]) # ++ (map (search:
|
|
#pkgs.writers.writeDashBin "reddit-${search}" ''
|
|
# ${unstablePkgs.tuir}/bin/tuir -s ${search} "$@"
|
|
#'') [ "nixos" "systemdUltras" "terraform" ])
|
|
;
|
|
}
|