nixos-config/system/desktop/packages.nix
2021-03-10 19:27:43 +01:00

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" ])
;
}