Compare commits

...

29 commits

Author SHA1 Message Date
7600976fbc WIP: ADD NOTE FOR FUTURE SELF
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2026-02-19 22:09:02 +01:00
4a9ff9e60b home: jujutsu: set 'ui.merge-editor'
Same reason as `ui.diff-editor`.
2026-02-19 22:09:02 +01:00
66c5cc1ca6 home: jujutsu: set 'ui.diff-editor'
Otherwise it keeps nagging me with a hint to set it.

I'm not a big fan of this UI, I wish I add something closer to Git's
patch interface.
2026-02-19 22:09:02 +01:00
ea838ecc7d homes: mousqueton: use system jujutsu
They have a custom `jj` with Piper CitC integration.
2026-02-19 22:09:02 +01:00
89d73b6e82 homes: bazin: use system jujutsu
They have a custom `jj` with Piper CitC integration.
2026-02-19 22:09:02 +01:00
f5488e3c56 home: jujutsu: simplify 'jj jj' alias 2026-02-19 22:09:02 +01:00
77cc2db471 home: jujutsu: explicitly create 'conf.d'
This is to serve as a reminder of _how_ to add a local configuration
file.
2026-02-19 22:09:02 +01:00
2f91e63164 home: jj: use verbose draft commit messages 2026-02-19 22:09:02 +01:00
3c85243cf0 home: jujutsu: set 'ui.pager'
The v0.36 release stopped honoring `$PAGER`. So enforce it in the
configuration (as I don't like their default pager settings).

Ideally this would be `mkIf`ed behind `my.home.pager.enable`, however it
looks like this does not work with the TOML type (does not seem to do
any `mkMerge`-ish logic).
2026-02-19 22:09:02 +01:00
a54719d3bf home: jujutsu: set 'ui.diff-formatter'
I *still* don't really like the built-in formatting, but it's more about
its highlighting than its syntax.

Given that I default to using `delta` anyways, it doesn't _really_
matter as I don't see the default output.
2026-02-19 22:09:02 +01:00
8b354d306b home: delta: add 'jujutsu.enable' 2026-02-19 22:09:02 +01:00
99b9ace469 home: add jujutsu
This is a very basic configuration, still missing most bells and
whistles.
2026-02-19 22:09:02 +01:00
7325073577 pkgs: diff-flake: rename 'host' to 'nixos'
To avoid mixing them up with Nix-Darwin and System Manager hosts.
2026-02-19 22:09:02 +01:00
dd6dfe17bc pkgs: diff-flake: add system-manager support 2026-02-19 22:09:02 +01:00
9701acce5b pkgs: diff-flake: add nix-darwin support 2026-02-19 22:09:02 +01:00
52037a8165 home: calibre: use upstream module 2026-02-19 22:09:02 +01:00
0f5d2601c6 home: vim: clarify how to disable 'ignorecase'
Because I tend to forget the exact way to do it, let's document it so I
have an easy place to check next time.
2026-02-19 22:09:02 +01:00
c8a06b30d0 home: vim: fix unimpaired mapping descriptions 2026-02-19 22:09:01 +01:00
8082de90c3 home: vim: prefix augroup with 'ambroisie.*' 2026-02-19 22:09:01 +01:00
fb2b20bd84 flake: checks: enable 'nixf-diagnose' 2026-02-19 21:43:04 +01:00
31e03ffdcb nixos: services: servarr: remove redundant 'lib'
My personal style preference (currently) is to use `with lib` on option
declarations, avoiding the `lib` prefix.
2026-02-19 21:43:04 +01:00
53c12a9e1a treewide: remove redundant 'builtins'
I keep forgetting `map` and `removeAttrs` are included at the top-level
in the prelude.
2026-02-19 21:43:04 +01:00
50709a1266 treewide: remove unused 'with pkgs' 2026-02-19 21:43:04 +01:00
89bd3aa428 flake: bump inputs
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2026-02-19 21:43:04 +01:00
4704b34db3 overlays: downgrade-transmission: add derivation
I need to vendor the full derivation definition, as upstream diverges
further and further away from 4.0.5.

On the next bump, the packaging for 4.1.0 starts becoming sufficiently
different to break my overlay.
2026-02-19 21:43:04 +01:00
ee18a18b33 pkgs: i3-get-window-criteria: fix 'xorg' packages
The `xorg` namespace is about to be removed in my next bump, so let's
pro-actively remove them now.
2026-02-19 20:13:55 +01:00
72efb0c7ea hosts: nixos: porthos: secrets: update cross-seed 2026-02-19 20:13:55 +01:00
c8f9e002f6 nixos: services: sabnzbd: add 'port' option 2026-02-19 15:08:43 +01:00
f2ae223c66 nixos: services: sabnzbd: fix deprecated config
I want to have _some_ settings set outside my NixOS configuration, so
keep the config-file writable.
2026-02-19 15:08:43 +01:00
34 changed files with 515 additions and 59 deletions

18
flake.lock generated
View file

@ -159,11 +159,11 @@
]
},
"locked": {
"lastModified": 1770654520,
"narHash": "sha256-mg5WZMIPGsFu9MxSrUcuJUPMbfMsF77el5yb/7rc10k=",
"lastModified": 1771505064,
"narHash": "sha256-lh9rF+C/nKFyWAqbHIa6tK9L/6N0UaQg7zw15aP4jBM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "6c4fdbe1ad198fac36c320fd45c5957324a80b8e",
"rev": "a0a01d8811fd5e99e003078ed64a0e7b531545dd",
"type": "github"
},
"original": {
@ -175,11 +175,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1770562336,
"narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=",
"lastModified": 1771369470,
"narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d6c71932130818840fc8fe9509cf50be8c64634f",
"rev": "0182a361324364ae3f436a63005877674cf45efb",
"type": "github"
},
"original": {
@ -199,11 +199,11 @@
]
},
"locked": {
"lastModified": 1770732881,
"narHash": "sha256-yGkibRit67Pz1uo1Kk55kZBHQq90K3gc0N762JGW/uQ=",
"lastModified": 1771506707,
"narHash": "sha256-R9oBi0EPsWN4bHfYgcyiSzx31/Fkgg3IHubf30II7Ow=",
"owner": "nix-community",
"repo": "NUR",
"rev": "06490c1287ab62a8c5075c440fd3e247913bc29c",
"rev": "30ad144e51a0ae8b47aa84c1139e84fc278d6e86",
"type": "github"
},
"original": {

View file

@ -15,6 +15,10 @@
enable = true;
};
nixf-diagnose = {
enable = true;
};
nixpkgs-fmt = {
enable = true;
};

View file

@ -22,6 +22,10 @@
package = pkgs.emptyDirectory;
};
jujutsu = {
package = pkgs.emptyDirectory;
};
tmux = {
# I use scripts that use the passthrough sequence often on this host
enablePassthrough = true;

View file

@ -25,6 +25,10 @@
package = pkgs.emptyDirectory;
};
jujutsu = {
package = pkgs.emptyDirectory;
};
tmux = {
# I use scripts that use the passthrough sequence often on this host
enablePassthrough = true;

View file

@ -10,8 +10,10 @@ in
};
config = lib.mkIf cfg.enable {
home.packages = with pkgs; [
cfg.package
];
programs.calibre = {
enable = true;
inherit (cfg) package;
};
};
}

View file

@ -24,6 +24,7 @@
./gtk
./htop
./jq
./jujutsu
./keyboard
./mail
./mpv

View file

@ -11,6 +11,10 @@ in
git = {
enable = my.mkDisableOption "git integration";
};
jujutsu = {
enable = my.mkDisableOption "jujutsu integration";
};
};
config = lib.mkIf cfg.enable {
@ -20,6 +24,9 @@ in
inherit (cfg) package;
enableGitIntegration = cfg.git.enable;
# `jj log -p` does not use `delta`
# https://github.com/jj-vcs/jj/issues/4142
enableJujutsuIntegration = cfg.jujutsu.enable;
options = {
features = "diff-highlight decorations";

View file

@ -17,7 +17,7 @@ in
config = lib.mkIf cfg.enable (lib.mkMerge [
{
home.packages = with pkgs; [
home.packages = [
cfg.package
];

View file

@ -0,0 +1,141 @@
{ config, pkgs, lib, ... }:
let
cfg = config.my.home.jujutsu;
inherit (lib.my) mkMailAddress;
in
{
options.my.home.jujutsu = with lib; {
enable = my.mkDisableOption "jujutsu configuration";
package = mkPackageOption pkgs "jujutsu" { };
};
config = lib.mkIf cfg.enable {
assertions = [
{
# For `jj git` commands
assertion = cfg.enable -> config.my.home.git.enable;
message = ''
`config.my.home.jujutsu` relies on `config.my.home.git` being enabled.
'';
}
];
programs.jujutsu = {
enable = true;
inherit (cfg) package;
settings = {
# Who am I?
user = {
name = "Bruno BELANYI";
email = mkMailAddress "bruno" "belanyi.fr";
};
aliases = {
jj = [ ];
# FIXME:
# * still not a big fan of the template
lol = [ "log" "-r" "..@" "-T" "builtin_log_oneline" ];
lola = [ "lol" "-r" "all()" ];
# FIXME: equivalent to `git switch -`
# See https://github.com/jj-vcs/jj/issues/2871
# Might be broken recently https://discord.com/channels/968932220549103686/1380272574709366989/1380432041983606855
# TODO:
# * `pick` (https://github.com/jj-vcs/jj/issues/5446): [ "util" "exec" "--" "bash" "-c" "jj log -p -r \"diff_contains($1)\"" "" ]
# * `root`: `jj workspace root` (barely necessary then)
};
ui = {
# Stop nagging me about it, though I am not a fan of its UI.
diff-editor = ":builtin";
# I don't like word-diff
diff-formatter = ":git";
# Stop nagging me about it, though I am not a fan of its UI.
merge-editor = ":builtin";
# Does not honor `$PAGER` (anymore)
pager = lib.mkDefault config.home.sessionVariables.PAGER;
};
# FIXME: git equivalents
# I'd like a better formatted blame (more like delta's?)
# blame = {
# coloring = "repeatedLines";
# markIgnoredLines = true;
# markUnblamables = true;
# };
# FIXME: log colors should probably match git
# FIXME: patience diff?
# FIXME: fetch prune/pruneTags?
# FIXME: pull.rebase=true? Probably true TBH
# FIXME: push.default=simple? Probably true TBH
# FIXME: conflict style? ui.conflict-marker-style=git is diff3, not zdiff3. Default looks fine-ish
# FIXME: from ma_9's config, plus my own stuff
# snapshot = {
# auto-track = "none()";
# };
#
# ui = {
# movement = {
# edit = false;
# };
# };
templates = {
# Equivalent to `commit.verbose = true` in Git
draft_commit_description = "commit_description_verbose(self)";
};
template-aliases = {
"commit_description_verbose(commit)" = ''
concat(
commit_description(commit),
"JJ: ignore-rest\n",
diff.git(),
)
'';
# FIXME: use `diff.summary()` instead? Supported by syntax highlighting
# See https://github.com/jj-vcs/jj/issues/1946#issuecomment-2572986485
# FIXME: tree-sitter grammar isn't in `nvim-treesitter` (https://github.com/kareigu/tree-sitter-jjdescription)
"commit_description(commit)" = ''
concat(
commit.description(), "\n",
"JJ: This commit contains the following changes:\n",
indent("JJ: ", diff.stat(72)),
)
'';
};
"--scope" = [
# Multiple identities
{
"--when" = {
repositories = [ "~/git/EPITA/" ];
};
user = {
name = "Bruno BELANYI";
email = mkMailAddress "bruno.belanyi" "epita.fr";
};
}
{
"--when" = {
repositories = [ "~/git/work/" ];
};
user = {
name = "Bruno BELANYI";
email = mkMailAddress "ambroisie" "google.com";
};
}
];
};
};
# To drop in a `local.toml` configuration, not-versioned
xdg.configFile = {
"jj/conf.d/.keep".text = "";
};
};
}

View file

@ -11,7 +11,7 @@ let
lib.mkDefault [ (lib.getExe pkgs.ambroisie.rbw-pass) "Mail" passName ];
address = mkMailAddress address domain;
aliases = builtins.map (lib.flip mkMailAddress domain) aliases;
aliases = map (lib.flip mkMailAddress domain) aliases;
inherit primary;

View file

@ -10,7 +10,7 @@ in
};
config = lib.mkIf cfg.enable {
home.packages = with pkgs; [
home.packages = [
cfg.package
];
};

View file

@ -82,7 +82,7 @@ local keys = {
-- Disable option
{ "]o", group = "Disable option" },
{ "]ob", desc = "Light background" },
{ "]ob", desc = "Dark background" },
{ "]oc", desc = "Cursor line" },
{ "]od", desc = "Diff" },
{ "]of", "<cmd>FormatDisable<CR>", desc = "LSP Formatting" },
@ -101,7 +101,7 @@ local keys = {
-- Toggle option
{ "yo", group = "Toggle option" },
{ "yob", desc = "Light background" },
{ "yob", desc = "Toggle background" },
{ "yoc", desc = "Cursor line" },
{ "yod", desc = "Diff" },
{ "yof", "<cmd>FormatToggle<CR>", desc = "LSP Formatting" },

View file

@ -112,7 +112,7 @@ colorscheme gruvbox
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Enable search high-lighting while the search is on-going
set hlsearch
" Ignore case on search
" Ignore case on search unless \C is in search terms
set ignorecase
" Ignore case unless there is an uppercase letter in the pattern
set smartcase

View file

@ -1,7 +1,7 @@
-- Show lines numbers
vim.opt.number = true
local numbertoggle = vim.api.nvim_create_augroup("numbertoggle", { clear = true })
local numbertoggle = vim.api.nvim_create_augroup("ambroisie.numbertoggle", { clear = true })
-- Toggle numbers between relative and absolute when changing buffers
vim.api.nvim_create_autocmd({ "BufEnter", "FocusGained", "InsertLeave", "WinEnter" }, {

View file

@ -83,7 +83,7 @@ end
vim.api.nvim_create_autocmd("FileType", {
pattern = "*",
group = vim.api.nvim_create_augroup("treesitter_attach", { clear = true }),
group = vim.api.nvim_create_augroup("ambroisie.treesitter_attach", { clear = true }),
callback = function(args)
local buf, filetype = args.buf, args.match
local language = vim.treesitter.language.get_lang(filetype)

View file

@ -1,4 +1,4 @@
local signtoggle = vim.api.nvim_create_augroup("signtoggle", { clear = true })
local signtoggle = vim.api.nvim_create_augroup("ambroisie.signtoggle", { clear = true })
-- Only show sign column for the currently focused buffer, if it has a number column
vim.api.nvim_create_autocmd({ "BufEnter", "FocusGained", "WinEnter" }, {

View file

@ -69,7 +69,7 @@ in
inactive_state = "Idle";
};
in
builtins.map (block: defaults // block) cfg.vpn.blockConfigs
map (block: defaults // block) cfg.vpn.blockConfigs
)
)
{

View file

@ -23,7 +23,7 @@ in
enable = true;
};
environment.systemPackages = builtins.map lib.hiPrio [
environment.systemPackages = map lib.hiPrio [
# Respect XDG conventions, leave my HOME alone
(pkgs.writeShellScriptBin "steam" ''
mkdir -p "${cfg.dataDir}"

View file

@ -96,7 +96,7 @@ in
# Contains the UID/GID map, and other useful state
"/var/lib/nixos"
# SSH host keys (and public keys for convenience)
(builtins.map (key: [ key.path "${key.path}.pub" ]) config.services.openssh.hostKeys)
(map (key: [ key.path "${key.path}.pub" ]) config.services.openssh.hostKeys)
];
services.restic.backups.backblaze = {

View file

@ -188,14 +188,14 @@ in
++ (lib.flip lib.mapAttrsToList cfg.virtualHosts (_: { subdomain, ... } @ args:
let
conflicts = [ "port" "root" "socket" "redirect" ];
optionsNotNull = builtins.map (v: args.${v} != null) conflicts;
optionsNotNull = map (v: args.${v} != null) conflicts;
optionsSet = lib.filter lib.id optionsNotNull;
in
{
assertion = builtins.length optionsSet == 1;
message = ''
Subdomain '${subdomain}' must have exactly one of ${
lib.concatStringsSep ", " (builtins.map (v: "'${v}'") conflicts)
lib.concatStringsSep ", " (map (v: "'${v}'") conflicts)
} configured.
'';
}))
@ -208,7 +208,7 @@ in
assertion = args.websocketsLocations != [ ] -> proxyPassUsed;
message = ''
Subdomain '${subdomain}' can only use 'websocketsLocations' with one of ${
lib.concatStringsSep ", " (builtins.map (v: "'${v}'") proxyPass)
lib.concatStringsSep ", " (map (v: "'${v}'") proxyPass)
}.
'';
}))

View file

@ -2,17 +2,35 @@
{ config, lib, ... }:
let
cfg = config.my.services.sabnzbd;
port = 9090; # NOTE: not declaratively set...
in
{
options.my.services.sabnzbd = with lib; {
enable = mkEnableOption "SABnzbd binary news reader";
port = mkOption {
type = types.port;
default = 9090;
example = 4242;
description = "The port on which SABnzbd will listen for incoming HTTP traffic";
};
};
config = lib.mkIf cfg.enable {
services.sabnzbd = {
enable = true;
group = "media";
# Don't warn about the config file
configFile = null;
# I want to configure servers outside of Nix
allowConfigWrite = true;
settings = {
misc = {
host = "127.0.0.1";
inherit (cfg) port;
};
};
};
# Set-up media group
@ -20,7 +38,7 @@ in
my.services.nginx.virtualHosts = {
sabnzbd = {
inherit port;
inherit (cfg) port;
};
};

View file

@ -4,7 +4,7 @@ let
in
{
options.my.services.servarr.bazarr = with lib; {
enable = lib.mkEnableOption "Bazarr" // {
enable = mkEnableOption "Bazarr" // {
default = config.my.services.servarr.enableAll;
};

View file

@ -4,7 +4,7 @@ let
in
{
options.my.services.servarr.jackett = with lib; {
enable = lib.mkEnableOption "Jackett" // {
enable = mkEnableOption "Jackett" // {
default = config.my.services.servarr.enableAll;
};

View file

@ -4,7 +4,7 @@ let
in
{
options.my.services.servarr.nzbhydra = with lib; {
enable = lib.mkEnableOption "NZBHydra2" // {
enable = mkEnableOption "NZBHydra2" // {
default = config.my.services.servarr.enableAll;
};
};

View file

@ -5,7 +5,7 @@ let
in
{
options.my.services.servarr.prowlarr = with lib; {
enable = lib.mkEnableOption "Prowlarr" // {
enable = mkEnableOption "Prowlarr" // {
default = config.my.services.servarr.enableAll;
};

View file

@ -12,7 +12,7 @@ let
in
{
options.my.services.servarr.${starr} = with lib; {
enable = lib.mkEnableOption (lib.toSentenceCase starr) // {
enable = mkEnableOption (lib.toSentenceCase starr) // {
default = config.my.services.servarr.enableAll;
};

View file

@ -1,6 +1,6 @@
# Automatically import all overlays in the directory
let
files = builtins.readDir ./.;
overlays = builtins.removeAttrs files [ "default.nix" ];
overlays = removeAttrs files [ "default.nix" ];
in
builtins.mapAttrs (name: _: import "${./.}/${name}") overlays

View file

@ -1,14 +1,7 @@
self: prev:
self: _prev:
{
transmission_4 = prev.transmission_4.overrideAttrs (_: {
version = "4.0.5";
src = self.fetchFromGitHub {
owner = "transmission";
repo = "transmission";
rev = "4.0.5";
hash = "sha256-gd1LGAhMuSyC/19wxkoE2mqVozjGPfupIPGojKY0Hn4=";
fetchSubmodules = true;
};
});
transmission_4 = self.callPackage ./transmission_4.nix {
fmt = self.fmt_9;
libutp = self.libutp_3_4;
};
}

View file

@ -0,0 +1,232 @@
{ stdenv
, lib
, fetchFromGitHub
, fetchpatch2
, cmake
, pkg-config
, python3
, openssl
, curl
, libevent
, inotify-tools
, systemd
, zlib
, pcre
, libb64
, libutp
, libdeflate
, utf8cpp
, fast-float
, fmt
, libpsl
, miniupnpc
, dht
, libnatpmp
, # Build options
enableGTK3 ? false
, gtkmm3
, libpthread-stubs
, wrapGAppsHook3
, enableQt5 ? false
, enableQt6 ? false
, qt5
, qt6Packages
, nixosTests
, enableSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
, enableDaemon ? true
, enableCli ? true
, installLib ? false
, apparmorRulesFromClosure
}:
let
inherit (lib) cmakeBool optionals;
apparmorRules = apparmorRulesFromClosure { name = "transmission-daemon"; } (
[
curl
libdeflate
libevent
libnatpmp
libpsl
miniupnpc
openssl
pcre
zlib
]
++ optionals enableSystemd [ systemd ]
++ optionals stdenv.hostPlatform.isLinux [ inotify-tools ]
);
in
stdenv.mkDerivation (finalAttrs: {
pname = "transmission";
version = "4.0.5";
src = fetchFromGitHub {
owner = "transmission";
repo = "transmission";
rev = finalAttrs.version;
hash = "sha256-gd1LGAhMuSyC/19wxkoE2mqVozjGPfupIPGojKY0Hn4=";
fetchSubmodules = true;
};
patches = [
(fetchpatch2 {
url = "https://github.com/transmission/transmission/commit/febfe49ca3ecab1a7142ecb34012c1f0b2bcdee8.patch?full_index=1";
hash = "sha256-Ge0+AXf/ilfMieGBAdvvImY7JOb0gGIdeKprC37AROs=";
excludes = [
# The submodule that we don't use (we use our miniupnp)
"third-party/miniupnp"
# Hunk fails for this one, but we don't care because we don't rely upon
# xcode definitions even for the Darwin build.
"Transmission.xcodeproj/project.pbxproj"
];
})
];
outputs = [
"out"
"apparmor"
];
cmakeFlags = [
(cmakeBool "ENABLE_CLI" enableCli)
(cmakeBool "ENABLE_DAEMON" enableDaemon)
(cmakeBool "ENABLE_GTK" enableGTK3)
(cmakeBool "ENABLE_MAC" false) # requires xcodebuild
(cmakeBool "ENABLE_QT" (enableQt5 || enableQt6))
(cmakeBool "INSTALL_LIB" installLib)
]
++ optionals stdenv.hostPlatform.isDarwin [
# Transmission sets this to 10.13 if not explicitly specified, see https://github.com/transmission/transmission/blob/0be7091eb12f4eb55f6690f313ef70a66795ee72/CMakeLists.txt#L7-L16.
"-DCMAKE_OSX_DEPLOYMENT_TARGET=${stdenv.hostPlatform.darwinMinVersion}"
];
postPatch = ''
# Clean third-party libraries to ensure system ones are used.
# Excluding gtest since it is hardcoded to vendored version. The rest of the listed libraries are not packaged.
pushd third-party
for f in *; do
if [[ ! $f =~ googletest|wildmat|wide-integer|jsonsl ]]; then
rm -r "$f"
fi
done
popd
rm \
cmake/FindFastFloat.cmake \
cmake/FindFmt.cmake \
cmake/FindUtfCpp.cmake
# Upstream uses different config file name.
substituteInPlace CMakeLists.txt --replace 'find_package(UtfCpp)' 'find_package(utf8cpp)'
# Use gettext even on Darwin
substituteInPlace libtransmission/utils.h \
--replace-fail '#if defined(HAVE_GETTEXT) && !defined(__APPLE__)' '#if defined(HAVE_GETTEXT)'
'';
nativeBuildInputs = [
pkg-config
cmake
python3
]
++ optionals enableGTK3 [ wrapGAppsHook3 ]
++ optionals enableQt5 [ qt5.wrapQtAppsHook ]
++ optionals enableQt6 [ qt6Packages.wrapQtAppsHook ];
buildInputs = [
curl
dht
fast-float
fmt
libb64
libdeflate
libevent
libnatpmp
libpsl
libutp
miniupnpc
openssl
pcre
utf8cpp
zlib
]
++ optionals enableQt5 (
with qt5;
[
qttools
qtbase
]
)
++ optionals enableQt6 (
with qt6Packages;
[
qttools
qtbase
qtsvg
]
)
++ optionals enableGTK3 [
gtkmm3
libpthread-stubs
]
++ optionals enableSystemd [ systemd ]
++ optionals stdenv.hostPlatform.isLinux [ inotify-tools ];
postInstall = ''
mkdir $apparmor
cat >$apparmor/bin.transmission-daemon <<EOF
abi <abi/4.0>,
include <tunables/global>
profile $out/bin/transmission-daemon {
include <abstractions/base>
include <abstractions/nameservice>
include <abstractions/ssl_certs>
include "${apparmorRules}"
@{PROC}/sys/kernel/random/uuid r,
@{PROC}/sys/vm/overcommit_memory r,
@{PROC}/@{pid}/environ r,
@{PROC}/@{pid}/mounts r,
/tmp/tr_session_id_* rwk,
$out/share/transmission/public_html/** r,
include if exists <local/bin.transmission-daemon>
}
EOF
install -Dm0444 -t $out/share/icons ../qt/icons/transmission.svg
'';
passthru.tests = {
apparmor = nixosTests.transmission_4; # starts the service with apparmor enabled
smoke-test = nixosTests.bittorrent;
};
meta = {
description = "Fast, easy and free BitTorrent client";
mainProgram =
if (enableQt5 || enableQt6) then
"transmission-qt"
else if enableGTK3 then
"transmission-gtk"
else
"transmission-cli";
longDescription = ''
Transmission is a BitTorrent client which features a simple interface
on top of a cross-platform back-end.
Feature spotlight:
* Uses fewer resources than other clients
* Native Mac, GTK and Qt GUI clients
* Daemon ideal for servers, embedded systems, and headless use
* All these can be remote controlled by Web and Terminal clients
* Bluetack (PeerGuardian) blocklists with automatic updates
* Full encryption, DHT, and PEX support
'';
homepage = "https://www.transmissionbt.com/";
license = with lib.licenses; [
gpl2Plus
mit
];
platforms = lib.platforms.unix;
};
})

View file

@ -24,11 +24,15 @@ current_system() {
nix eval --raw --impure --expr 'builtins.currentSystem'
}
add_darwin() {
FLAKE_OUTPUTS+=("darwinConfigurations.\"$1\".config.system.build.toplevel")
}
add_home() {
FLAKE_OUTPUTS+=("homeConfigurations.\"$1\".activationPackage")
}
add_host() {
add_nixos() {
FLAKE_OUTPUTS+=("nixosConfigurations.\"$1\".config.system.build.toplevel")
}
@ -37,6 +41,10 @@ add_shell() {
FLAKE_OUTPUTS+=("devShells.\"$(current_system)\".\"$1\".inputDerivation")
}
add_system() {
FLAKE_OUTPUTS+=("systemConfigs.\"$1\".config.system.build.toplevel")
}
usage() {
print_err "Usage: $0 [option]... [-- [nix build option]...]"
print_err ""
@ -54,11 +62,15 @@ usage() {
print_err " -p, --previous-rev"
print_err " which git revision should be considered the 'previous' state,"
print_err " defaults to HEAD~"
print_err " --darwin [name]"
print_err " specify the name of a nix-darwin output configuration whose"
print_err " closure should be diffed, can be used multiple times"
print_err " if no host name is given, defaults to current hostname"
print_err " --home [name]"
print_err " specify the name of a home-manager output configuration whose"
print_err " closure should be diffed, can be used multiple times"
print_err " if no configuration name is given, defaults to current username"
print_err " --host [name]"
print_err " --nixos [name]"
print_err " specify the name of a NixOS output configuration whose"
print_err " closure should be diffed, can be used multiple times"
print_err " if no host name is given, defaults to current hostname"
@ -66,6 +78,10 @@ usage() {
print_err " specify a specific devShell configuration name whose closure"
print_err " should be diffed, can be used multiple times"
print_err " if no name is given, defaults to 'default'"
print_err " --system [name]"
print_err " specify the name of a system-manager output configuration whose"
print_err " closure should be diffed, can be used multiple times"
print_err " if no host name is given, defaults to current hostname"
print_err ""
print_err "when no flake outputs are specified, automatically queries for"
print_err "all NixOS configurations, and devShells for current system"
@ -101,6 +117,14 @@ parse_args() {
PREVIOUS_REV="$(git rev-parse "$1")"
shift
;;
--darwin)
if [ $# -gt 0 ] && ! is_option "$1"; then
add_darwin "$1"
shift
else
add_darwin "$(hostname)"
fi
;;
--home)
if [ $# -gt 0 ] && ! is_option "$1"; then
add_home "$1"
@ -109,12 +133,12 @@ parse_args() {
add_home "$USER"
fi
;;
--host)
--nixos)
if [ $# -gt 0 ] && ! is_option "$1"; then
add_host "$1"
add_nixos "$1"
shift
else
add_host "$(hostname)"
add_nixos "$(hostname)"
fi
;;
--shell)
@ -125,6 +149,14 @@ parse_args() {
add_shell "default"
fi
;;
--system)
if [ $# -gt 0 ] && ! is_option "$1"; then
add_system "$1"
shift
else
add_system "$(hostname)"
fi
;;
--)
NIX_BUILD_ARGS=("$@")
break
@ -138,6 +170,12 @@ parse_args() {
done
}
list_darwin_configurations() {
nix eval '.#darwinConfigurations' \
--apply 'attrs: with builtins; concatStringsSep "\n" (attrNames attrs)' \
--raw
}
list_home_configurations() {
nix eval '.#homeConfigurations' \
--apply 'attrs: with builtins; concatStringsSep "\n" (attrNames attrs)' \
@ -156,6 +194,12 @@ list_dev_shells() {
--raw
}
list_system_configurations() {
nix eval '.#systemConfigs' \
--apply 'attrs: with builtins; concatStringsSep "\n" (attrNames attrs)' \
--raw
}
diff_output() {
local PREV NEW
PREV="$(mktemp --dry-run)"
@ -175,15 +219,21 @@ diff_output() {
parse_args "$@"
if [ "${#FLAKE_OUTPUTS[@]}" -eq 0 ]; then
for darwin in $(list_darwin_configurations); do
add_darwin "$darwin"
done
for home in $(list_home_configurations); do
add_home "$home"
done
for host in $(list_nixos_configurations); do
add_host "$host"
for nixos in $(list_nixos_configurations); do
add_nixos "$nixos"
done
for shell in $(list_dev_shells); do
add_shell "$shell"
done
for system in $(list_system_configurations); do
add_system "$system"
done
fi
for out in "${FLAKE_OUTPUTS[@]}"; do

View file

@ -1,4 +1,4 @@
{ lib, coreutils, gnused, makeWrapper, stdenvNoCC, xorg }:
{ lib, coreutils, gnused, makeWrapper, stdenvNoCC, xprop, xwininfo }:
stdenvNoCC.mkDerivation rec {
pname = "i3-get-window-criteria";
version = "0.1.0";
@ -22,8 +22,8 @@ stdenvNoCC.mkDerivation rec {
wrapperPath = lib.makeBinPath [
coreutils
gnused
xorg.xprop
xorg.xwininfo
xprop
xwininfo
];
fixupPhase = ''

View file

@ -95,7 +95,7 @@
self.packages.${system}.project
];
packages = with pkgs; [
packages = [
self.checks.${system}.pre-commit.enabledPackages
];

View file

@ -95,7 +95,7 @@
self.packages.${system}.project
];
packages = with pkgs; [
packages = [
self.checks.${system}.pre-commit.enabledPackages
];