- new host `devbox`
- `flake-parts` module to manage agenix secrets
- Searx -> Google again 😩 (it was too slow)
- WIP `git-workspace` module for `home-manager`
- `cgit` module
- `spotify-adblocked` packaged
This commit is contained in:
Andrea Ciceri 2023-03-26 11:35:42 +02:00
parent 29bea282e7
commit 52298435cd
No known key found for this signature in database
23 changed files with 947 additions and 67 deletions

View file

@ -28,7 +28,7 @@
# fx_cast # TODO make PR to rycee NUR repo
];
settings = {
"browser.startup.homepage" = "https://searx.be";
"browser.startup.homepage" = "https://google.com";
"browser.search.region" = "IT";
"browser.search.isUS" = false;
"distribution.searchplugins.defaultLocale" = "it-IT";
@ -39,7 +39,7 @@
"browser.shell.checkDefaultBrowser" = false;
};
search.force = true;
search.default = "Searx";
search.default = "Google";
search.engines = {
"Searx" = {
urls = [

View file

@ -0,0 +1,45 @@
{age, ...}: {
imports = [
./git-workspace-program.nix
./git-workspace-service.nix
];
programs.git-workspace.enable = true;
services.git-workspace = {
enable = true;
frequency = "04:00:00";
environmentFile = age.secrets.git-workspace-tokens.path;
workspaces = {
aciceri = {
provider = [
{
provider = "github";
name = "aciceri";
path = "/home/ccr/projects";
skips_forks = false;
}
];
};
mlabs = {
provider = [
{
provider = "github";
name = "mlabs-haskell";
path = "/home/ccr/projects";
skip_forks = false;
}
];
};
ethereansos = {
provider = [
{
provider = "github";
name = "EthereansOS";
path = "/home/ccr/projects";
skip_forks = false;
}
];
};
};
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.programs.git-workspace;
in {
options.programs.git-workspace = {
enable = lib.mkEnableOption "git-workspace";
package = lib.mkOption {
type = lib.types.package;
default = pkgs.git-workspace;
description = "The git-workspace to use";
};
};
config = lib.mkIf cfg.enable {
home.packages = [pkgs.git-workspace];
};
}

View file

@ -0,0 +1,96 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.services.git-workspace;
tomlFormat = pkgs.formats.toml {};
in {
options.services.git-workspace = {
enable = lib.mkEnableOption "git-workspace systemd timer";
package = lib.mkOption {
type = lib.types.package;
default =
if config.programs.git-workspace.enable
then config.programs.git-workspace.package
else pkgs.git-workspace;
description = "The git-workspace to use";
};
frequency = lib.mkOption {
type = lib.types.str;
default = "";
description = "";
};
environmentFile = lib.mkOption {
type = lib.types.path;
default = "";
description = "";
example = "";
};
workspaces = lib.mkOption {
type = lib.types.attrsOf tomlFormat.type;
default = {};
description = "Workspaces verbatims";
# example = {
# workspace-foo = {
# provider = [
# {
# provider = "github";
# name = "";
# path = "...";
# skip_forks = false;
# }
# ];
# };
# };
};
};
config = lib.mkIf cfg.enable {
xdg.configFile =
lib.mapAttrs' (workspaceName: workspace: {
name = "git-workspace/${workspaceName}/workspace.toml";
value.source =
(tomlFormat.generate "${workspaceName}-workspace.toml" workspace).outPath;
})
cfg.workspaces;
systemd.user.services =
lib.mapAttrs' (workspaceName: workspace: rec {
name = "git-workspace-${workspaceName}-update";
value = {
Unit.Description = "Runs `git-workspace update` for ${workspaceName}";
Service = {
EnvironmentFile = cfg.environmentFile;
ExecStart = let
script = pkgs.writeShellApplication {
name = "${name}-launcher";
text = ''
${cfg.package}/bin/git-workspace \
--workspace ${config.xdg.configHome}/git-workspace/${workspaceName} \
update
'';
runtimeInputs = with pkgs; [busybox openssh git];
};
in "${script}/bin/${name}-launcher";
};
};
})
cfg.workspaces;
systemd.user.timers =
lib.mapAttrs' (workspaceName: workspace: {
name = "git-workspace-${workspaceName}-update";
value = {
Unit = {
Description = "Automatically runs `git-workspace update` for ${workspaceName}";
};
Timer = {
Unit = "git-workspace-${workspaceName}-update.unit";
OnCalendar = cfg.frequency;
Persistent = true;
};
Install.WantedBy = ["timers.target"];
};
})
cfg.workspaces;
};
}

View file

@ -14,13 +14,21 @@ in {
pull.rebase = false;
rebase.autostash = true;
github.user = "aciceri";
user.signingKey = "/home/ccr/.ssh/id_rsa";
gpg.format = "ssh";
commit.gpgsign = true;
};
userName = config.name;
userEmail = config.email;
signing = {
signByDefault = true;
key = config.email;
# signing = {
# signByDefault = true;
# key = config.email;
# };
extraConfig.url = {
"ssh://git@github.com/" = {insteadOf = "https://github.com/";};
};
delta = {

View file

@ -0,0 +1,13 @@
{
programs.kitty = {
enable = true;
font = {
name = "Fira Code";
size = 12;
};
settings = {
disable_ligatures = "cursor";
confirm_os_window_close = 0;
};
};
}

View file

@ -0,0 +1,27 @@
{pkgs, ...}: let
spotify-adblock = pkgs.rustPlatform.buildRustPackage {
pname = "spotify-adblock";
version = "1.0.2";
src = pkgs.fetchFromGitHub {
owner = "abba23";
repo = "spotify-adblock";
rev = "v1.0.2";
sha256 = "YGD3ymBZ2yT3vrcPRS9YXcljGNczJ1vCvAXz/k16r9Y=";
};
cargoSha256 = "bYqkCooBfGeHZHl2/9Om+0qbudyOCzpvwMhy8QCsPRE=";
};
spotify-adblocked = pkgs.callPackage ./spotify-adblocked.nix {
inherit spotify-adblock;
};
# spotify-adblocked = pkgs.spotify.overrideAttrs (_: {
# preInstallPhase = ''
# ln -s ${spotify-adblock}/lib/libspotifyadblock.so $out/lib/spotify/
# # wrapProgram $out/bin/spotify \
# # --set LD_PRELOAD ${spotify-adblock}/lib/libspotifyadblock.so
# '';
# });
in {
home.packages = [spotify-adblocked];
}

View file

@ -0,0 +1,212 @@
{
fetchurl,
lib,
stdenv,
squashfsTools,
xorg,
alsa-lib,
makeWrapper,
wrapGAppsHook,
openssl,
freetype,
glib,
pango,
cairo,
atk,
gdk-pixbuf,
gtk3,
cups,
nspr,
nss,
libpng,
libnotify,
libgcrypt,
systemd,
fontconfig,
dbus,
expat,
ffmpeg,
curlWithGnuTls,
zlib,
gnome,
at-spi2-atk,
at-spi2-core,
libpulseaudio,
libdrm,
mesa,
libxkbcommon,
# High-DPI support: Spotify's --force-device-scale-factor argument
# not added if `null`, otherwise, should be a number.
deviceScaleFactor ? null,
spotify-adblock,
}: let
# TO UPDATE: just execute the ./update.sh script (won't do anything if there is no update)
# "rev" decides what is actually being downloaded
# If an update breaks things, one of those might have valuable info:
# https://aur.archlinux.org/packages/spotify/
# https://community.spotify.com/t5/Desktop-Linux
version = "1.1.84.716.gc5f8b819";
# To get the latest stable revision:
# curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/spotify?channel=stable' | jq '.download_url,.version,.last_updated'
# To get general information:
# curl -H 'Snap-Device-Series: 16' 'https://api.snapcraft.io/v2/snaps/info/spotify' | jq '.'
# More examples of api usage:
# https://github.com/canonical-websites/snapcraft.io/blob/master/webapp/publisher/snaps/views.py
rev = "60";
deps = [
alsa-lib
at-spi2-atk
at-spi2-core
atk
cairo
cups
curlWithGnuTls
dbus
expat
ffmpeg
fontconfig
freetype
gdk-pixbuf
glib
gtk3
libdrm
libgcrypt
libnotify
libpng
libpulseaudio
libxkbcommon
mesa
nss
pango
stdenv.cc.cc
systemd
xorg.libICE
xorg.libSM
xorg.libX11
xorg.libxcb
xorg.libXcomposite
xorg.libXcursor
xorg.libXdamage
xorg.libXext
xorg.libXfixes
xorg.libXi
xorg.libXrandr
xorg.libXrender
xorg.libXScrnSaver
xorg.libxshmfence
xorg.libXtst
zlib
];
in
stdenv.mkDerivation {
pname = "spotify";
inherit version;
# fetch from snapcraft instead of the debian repository most repos fetch from.
# That is a bit more cumbersome. But the debian repository only keeps the last
# two versions, while snapcraft should provide versions indefinately:
# https://forum.snapcraft.io/t/how-can-a-developer-remove-her-his-app-from-snap-store/512
# This is the next-best thing, since we're not allowed to re-distribute
# spotify ourselves:
# https://community.spotify.com/t5/Desktop-Linux/Redistribute-Spotify-on-Linux-Distributions/td-p/1695334
src = fetchurl {
url = "https://api.snapcraft.io/api/v1/snaps/download/pOBIoZ2LrCB3rDohMxoYGnbN14EHOgD7_${rev}.snap";
sha512 = "1209b956822d8bb661daa2c88616bed403ec26dc22c6b866cecff59235c56112284c2f99aa06352fc0df6fcd15225a6ad60afd3b4ff4d7b948ab83e70ab31a71";
};
nativeBuildInputs = [makeWrapper wrapGAppsHook squashfsTools];
dontStrip = true;
dontPatchELF = true;
unpackPhase = ''
runHook preUnpack
unsquashfs "$src" '/usr/share/spotify' '/usr/bin/spotify' '/meta/snap.yaml'
cd squashfs-root
if ! grep -q 'grade: stable' meta/snap.yaml; then
# Unfortunately this check is not reliable: At the moment (2018-07-26) the
# latest version in the "edge" channel is also marked as stable.
echo "The snap package is marked as unstable:"
grep 'grade: ' meta/snap.yaml
echo "You probably chose the wrong revision."
exit 1
fi
if ! grep -q '${version}' meta/snap.yaml; then
echo "Package version differs from version found in snap metadata:"
grep 'version: ' meta/snap.yaml
echo "While the nix package specifies: ${version}."
echo "You probably chose the wrong revision or forgot to update the nix version."
exit 1
fi
runHook postUnpack
'';
# Prevent double wrapping
dontWrapGApps = true;
installPhase = ''
runHook preInstall
libdir=$out/lib/spotify
mkdir -p $libdir
mv ./usr/* $out/
cp meta/snap.yaml $out
# Work around Spotify referring to a specific minor version of
# OpenSSL.
ln -s ${lib.getLib openssl}/lib/libssl.so $libdir/libssl.so.1.0.0
ln -s ${lib.getLib openssl}/lib/libcrypto.so $libdir/libcrypto.so.1.0.0
ln -s ${nspr.out}/lib/libnspr4.so $libdir/libnspr4.so
ln -s ${nspr.out}/lib/libplc4.so $libdir/libplc4.so
ln -s ${ffmpeg.lib}/lib/libavcodec.so* $libdir
ln -s ${ffmpeg.lib}/lib/libavformat.so* $libdir
ln -s ${spotify-adblock}/lib/libspotifyadblock.so $libdir
rpath="$out/share/spotify:$libdir"
patchelf \
--interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
--set-rpath $rpath $out/share/spotify/spotify
librarypath="${lib.makeLibraryPath deps}:$libdir"
wrapProgram $out/share/spotify/spotify \
''${gappsWrapperArgs[@]} \
${lib.optionalString (deviceScaleFactor != null) ''
--add-flags "--force-device-scale-factor=${toString deviceScaleFactor}" \
''} \
--prefix LD_LIBRARY_PATH : "$librarypath" \
--prefix PATH : "${gnome.zenity}/bin"
# fix Icon line in the desktop file (#48062)
sed -i "s:^Icon=.*:Icon=spotify-client:" "$out/share/spotify/spotify.desktop"
# Desktop file
mkdir -p "$out/share/applications/"
cp "$out/share/spotify/spotify.desktop" "$out/share/applications/"
# Icons
for i in 16 22 24 32 48 64 128 256 512; do
ixi="$i"x"$i"
mkdir -p "$out/share/icons/hicolor/$ixi/apps"
ln -s "$out/share/spotify/icons/spotify-linux-$i.png" \
"$out/share/icons/hicolor/$ixi/apps/spotify-client.png"
done
runHook postInstall
'';
meta = with lib; {
homepage = "https://www.spotify.com/";
description = "Play music from the Spotify music service";
sourceProvenance = with sourceTypes; [binaryNativeCode];
license = licenses.unfree;
maintainers = with maintainers; [eelco ftrvxmtrx sheenobu mudri timokau ma27];
platforms = ["x86_64-linux"];
};
}

View file

@ -10,6 +10,7 @@
./gammastep.nix
../foot
../alacritty
../kitty
];
config = {
home.packages = with pkgs; [wl-clipboard];