mirror of
https://github.com/nix-community/home-manager.git
synced 2026-01-11 17:39:37 +08:00
Compare commits
35 Commits
9afe77a70b
...
release-25
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
82fb7dedaa | ||
|
|
8c8a16d413 | ||
|
|
c08430923e | ||
|
|
6bd04da47c | ||
|
|
7a06e8a2f8 | ||
|
|
d49d2543f0 | ||
|
|
34578a2fdf | ||
|
|
e298a14801 | ||
|
|
0999ed8f96 | ||
|
|
aaf4650642 | ||
|
|
6ef8697671 | ||
|
|
71c2a550e6 | ||
|
|
fdec8815a8 | ||
|
|
d3135ab747 | ||
|
|
7df150f0d3 | ||
|
|
af31796621 | ||
|
|
5960558067 | ||
|
|
90b62096f0 | ||
|
|
4477715265 | ||
|
|
20561be440 | ||
|
|
f63d0fe9d8 | ||
|
|
e1680d594a | ||
|
|
3366918730 | ||
|
|
7385f250cc | ||
|
|
9ea0c94e00 | ||
|
|
f3902b5d87 | ||
|
|
44a3b79aad | ||
|
|
ffae9e1bca | ||
|
|
acd2931703 | ||
|
|
3fdd076e08 | ||
|
|
ba2259d7d5 | ||
|
|
d0c5fdc48d | ||
|
|
7f7e33a679 | ||
|
|
2217780c39 | ||
|
|
cbe30a7689 |
2
.github/workflows/backport.yml
vendored
2
.github/workflows/backport.yml
vendored
@@ -37,7 +37,7 @@ jobs:
|
|||||||
ref: ${{ github.event.pull_request.head.sha }}
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
- name: Create backport PRs
|
- name: Create backport PRs
|
||||||
id: backport
|
id: backport
|
||||||
uses: korthout/backport-action@v3
|
uses: korthout/backport-action@v4
|
||||||
with:
|
with:
|
||||||
# See https://github.com/korthout/backport-action#inputs
|
# See https://github.com/korthout/backport-action#inputs
|
||||||
github_token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
|
github_token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
2
.github/workflows/update-flake.yml
vendored
2
.github/workflows/update-flake.yml
vendored
@@ -41,7 +41,7 @@ jobs:
|
|||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v31
|
uses: cachix/install-nix-action@v31
|
||||||
- name: Update flake.lock
|
- name: Update flake.lock
|
||||||
uses: DeterminateSystems/update-flake-lock@v27
|
uses: DeterminateSystems/update-flake-lock@v28
|
||||||
with:
|
with:
|
||||||
token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
|
token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
|
||||||
git-committer-name: ${{ steps.user-info.outputs.name || 'github-actions[bot]' }}
|
git-committer-name: ${{ steps.user-info.outputs.name || 'github-actions[bot]' }}
|
||||||
|
|||||||
@@ -57,3 +57,9 @@ changes are only active if the `home.stateVersion` option is set to
|
|||||||
|
|
||||||
now default to `true` which is consistent with the default values
|
now default to `true` which is consistent with the default values
|
||||||
for those options used by `i3` and `sway`.
|
for those options used by `i3` and `sway`.
|
||||||
|
|
||||||
|
- The [](#opt-programs.swaylock.enable) option now defaults to `false`
|
||||||
|
and must be explicitly enabled. Previously, it would be implicitly
|
||||||
|
enabled when `programs.swaylock.settings` was non-empty. Users with
|
||||||
|
`home.stateVersion` set to earlier versions will continue to get the
|
||||||
|
old implicit behavior.
|
||||||
|
|||||||
@@ -27,4 +27,8 @@ The state version in this release includes the changes below. These
|
|||||||
changes are only active if the `home.stateVersion` option is set to
|
changes are only active if the `home.stateVersion` option is set to
|
||||||
\"25.05\" or later.
|
\"25.05\" or later.
|
||||||
|
|
||||||
- No changes.
|
- The [](#opt-programs.git.signing.format) option no longer defaults to
|
||||||
|
`"openpgp"`. Users who use Git signing with GPG should explicitly set
|
||||||
|
this option to `"openpgp"` to maintain the previous behavior. Users
|
||||||
|
with `home.stateVersion` set to earlier versions will continue to get
|
||||||
|
the `"openpgp"` default for backwards compatibility.
|
||||||
|
|||||||
@@ -80,3 +80,10 @@ changes are only active if the `home.stateVersion` option is set to
|
|||||||
`{ PASSWORD_STORE_DIR = $XDG_DATA_HOME/password-store; }` anymore by its
|
`{ PASSWORD_STORE_DIR = $XDG_DATA_HOME/password-store; }` anymore by its
|
||||||
default value. This will revert to the default behaviour of the program,
|
default value. This will revert to the default behaviour of the program,
|
||||||
namely `$HOME/.password-store` to be used as the store path.
|
namely `$HOME/.password-store` to be used as the store path.
|
||||||
|
|
||||||
|
- On macOS, [](#opt-targets.darwin.copyApps.enable) is now enabled by
|
||||||
|
default instead of [](#opt-targets.darwin.linkApps.enable). This means
|
||||||
|
applications from `home.packages` will be copied to
|
||||||
|
`~/Applications/Home Manager Apps` rather than symlinked, making them
|
||||||
|
work properly with Spotlight. Users with `home.stateVersion` set to
|
||||||
|
earlier versions will continue to use `linkApps` by default.
|
||||||
|
|||||||
8
flake.lock
generated
8
flake.lock
generated
@@ -2,16 +2,16 @@
|
|||||||
"nodes": {
|
"nodes": {
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1763678758,
|
"lastModified": 1767799921,
|
||||||
"narHash": "sha256-+hBiJ+kG5IoffUOdlANKFflTT5nO3FrrR2CA3178Y5s=",
|
"narHash": "sha256-r4GVX+FToWVE2My8VVZH4V0pTIpnu2ZE8/Z4uxGEMBE=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "117cc7f94e8072499b0a7aa4c52084fa4e11cc9b",
|
"rev": "d351d0653aeb7877273920cd3e823994e7579b0b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-unstable",
|
"ref": "nixos-25.11",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
description = "Home Manager for Nix";
|
description = "Home Manager for Nix";
|
||||||
|
|
||||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -102,8 +102,8 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
local = mkOption {
|
local = mkOption {
|
||||||
type = types.nullOr (localModule name);
|
type = localModule name;
|
||||||
default = null;
|
default = { };
|
||||||
description = ''
|
description = ''
|
||||||
Local configuration for the contacts.
|
Local configuration for the contacts.
|
||||||
'';
|
'';
|
||||||
|
|||||||
@@ -8,6 +8,10 @@
|
|||||||
let
|
let
|
||||||
cfg = config.qt;
|
cfg = config.qt;
|
||||||
|
|
||||||
|
qtctFormat = pkgs.formats.ini {
|
||||||
|
listToValue = values: lib.concatStringsSep ", " values;
|
||||||
|
};
|
||||||
|
|
||||||
# Map platform names to their packages.
|
# Map platform names to their packages.
|
||||||
platformPackages = with pkgs; {
|
platformPackages = with pkgs; {
|
||||||
gnome = [
|
gnome = [
|
||||||
@@ -286,7 +290,34 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
|
// (lib.genAttrs' [ "qt5ct" "qt6ct" ] (
|
||||||
|
name:
|
||||||
|
lib.nameValuePair "${name}Settings" (
|
||||||
|
lib.mkOption {
|
||||||
|
type = lib.types.nullOr qtctFormat.type;
|
||||||
|
default = null;
|
||||||
|
example = lib.literalExpression ''
|
||||||
|
{
|
||||||
|
Appearance = {
|
||||||
|
style = "kvantum";
|
||||||
|
icon_theme = "Papirus-Dark";
|
||||||
|
standar_dialogs = "xdgdesktopportal";
|
||||||
|
};
|
||||||
|
Fonts = {
|
||||||
|
fixed = "\"DejaVuSansM Nerd Font Mono,12\"";
|
||||||
|
general = "\"DejaVu Sans,12\"";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
Qtct configuration. Writes settings to `${name}/${name}.conf`
|
||||||
|
file. Lists will be translated to comma-separated strings.
|
||||||
|
Fonts must be quoted (see example).
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
)
|
||||||
|
));
|
||||||
};
|
};
|
||||||
|
|
||||||
config =
|
config =
|
||||||
@@ -397,5 +428,18 @@ in
|
|||||||
]
|
]
|
||||||
++ lib.optionals (platformTheme.name != null) [ "QT_QPA_PLATFORMTHEME" ]
|
++ lib.optionals (platformTheme.name != null) [ "QT_QPA_PLATFORMTHEME" ]
|
||||||
++ lib.optionals (cfg.style.name != null) [ "QT_STYLE_OVERRIDE" ];
|
++ lib.optionals (cfg.style.name != null) [ "QT_STYLE_OVERRIDE" ];
|
||||||
|
|
||||||
|
xdg.configFile =
|
||||||
|
lib.pipe
|
||||||
|
[ "qt5ct" "qt6ct" ]
|
||||||
|
[
|
||||||
|
(lib.filter (qtct: cfg."${qtct}Settings" != null))
|
||||||
|
(lib.flip lib.genAttrs' (
|
||||||
|
qtct:
|
||||||
|
lib.nameValuePair "${qtct}/${qtct}.conf" {
|
||||||
|
source = qtctFormat.generate "${qtct}-config" cfg."${qtct}Settings";
|
||||||
|
}
|
||||||
|
))
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -645,7 +645,7 @@ in
|
|||||||
# Support completion for `man` by building a cache for `apropos`.
|
# Support completion for `man` by building a cache for `apropos`.
|
||||||
programs.man.generateCaches = lib.mkDefault true;
|
programs.man.generateCaches = lib.mkDefault true;
|
||||||
|
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source =
|
xdg.dataFile."fish/home-manager/generated_completions".source =
|
||||||
let
|
let
|
||||||
# Paths later in the list will overwrite those already linked
|
# Paths later in the list will overwrite those already linked
|
||||||
destructiveSymlinkJoin =
|
destructiveSymlinkJoin =
|
||||||
@@ -696,7 +696,7 @@ in
|
|||||||
set -l post_joined (string replace $prev_joined "" $joined)
|
set -l post_joined (string replace $prev_joined "" $joined)
|
||||||
set -l prev (string split " " (string trim $prev_joined))
|
set -l prev (string split " " (string trim $prev_joined))
|
||||||
set -l post (string split " " (string trim $post_joined))
|
set -l post (string split " " (string trim $post_joined))
|
||||||
set fish_complete_path $prev "${config.xdg.dataHome}/fish/home-manager_generated_completions" $post
|
set fish_complete_path $prev "${config.xdg.dataHome}/fish/home-manager/generated_completions" $post
|
||||||
end
|
end
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
localStorage = calendar: name: acc: {
|
localStorage = calendar: name: acc: {
|
||||||
name = "storage";
|
name = "storage";
|
||||||
params = [ "${name}-local" ];
|
params = [ "${if calendar then "calendar" else "contacts"}-${name}-local" ];
|
||||||
children =
|
children =
|
||||||
(attrsToDirectives {
|
(attrsToDirectives {
|
||||||
inherit (acc.local) path;
|
inherit (acc.local) path;
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
|
|
||||||
remoteStorage = calendar: name: acc: {
|
remoteStorage = calendar: name: acc: {
|
||||||
name = "storage";
|
name = "storage";
|
||||||
params = [ "${name}-remote" ];
|
params = [ "${if calendar then "calendar" else "contacts"}-${name}-remote" ];
|
||||||
children =
|
children =
|
||||||
(attrsToDirectives {
|
(attrsToDirectives {
|
||||||
inherit (acc.remote) url;
|
inherit (acc.remote) url;
|
||||||
@@ -91,8 +91,8 @@
|
|||||||
params = lib.singleton "${if calendar then "calendar" else "contacts"}-${name}";
|
params = lib.singleton "${if calendar then "calendar" else "contacts"}-${name}";
|
||||||
children =
|
children =
|
||||||
(attrsToDirectives {
|
(attrsToDirectives {
|
||||||
storage_a = "${name}-local";
|
storage_a = "${if calendar then "calendar" else "contacts"}-${name}-local";
|
||||||
storage_b = "${name}-remote";
|
storage_b = "${if calendar then "calendar" else "contacts"}-${name}-remote";
|
||||||
})
|
})
|
||||||
++ acc.pimsync.extraPairDirectives;
|
++ acc.pimsync.extraPairDirectives;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -40,6 +40,12 @@ let
|
|||||||
description = "The remote path to mount.";
|
description = "The remote path to mount.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mountDestPath = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
description = "The path on the current machine where the remote path would be mounted.";
|
||||||
|
};
|
||||||
|
|
||||||
authType = mkOption {
|
authType = mkOption {
|
||||||
type = types.enum [
|
type = types.enum [
|
||||||
"password"
|
"password"
|
||||||
@@ -47,6 +53,7 @@ let
|
|||||||
"hostbased"
|
"hostbased"
|
||||||
"keyboard-interactive"
|
"keyboard-interactive"
|
||||||
"gssapi-with-mic"
|
"gssapi-with-mic"
|
||||||
|
"authentication-agent"
|
||||||
];
|
];
|
||||||
default = "publickey";
|
default = "publickey";
|
||||||
description = "The authentication method to use.";
|
description = "The authentication method to use.";
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ let
|
|||||||
attrValues
|
attrValues
|
||||||
concatStringsSep
|
concatStringsSep
|
||||||
filter
|
filter
|
||||||
|
flatten
|
||||||
length
|
length
|
||||||
literalExpression
|
literalExpression
|
||||||
mapAttrsToList
|
mapAttrsToList
|
||||||
@@ -918,7 +919,14 @@ in
|
|||||||
calendarAccounts = getAccountsForProfile name enabledCalendarAccountsWithId;
|
calendarAccounts = getAccountsForProfile name enabledCalendarAccountsWithId;
|
||||||
contactAccounts = getAccountsForProfile name enabledContactAccountsWithId;
|
contactAccounts = getAccountsForProfile name enabledContactAccountsWithId;
|
||||||
|
|
||||||
smtp = filter (a: a.smtp != null) emailAccounts;
|
accountsSmtp = filter (a: a.smtp != null) emailAccounts;
|
||||||
|
aliasesSmtp =
|
||||||
|
let
|
||||||
|
getAliasesWithSmtp = a: filter (al: builtins.isAttrs al && al.smtp != null) a.aliases;
|
||||||
|
getAliasesWithId = a: map (al: al // { id = getId a al; }) (getAliasesWithSmtp a);
|
||||||
|
in
|
||||||
|
flatten (map getAliasesWithId emailAccounts);
|
||||||
|
smtp = accountsSmtp ++ aliasesSmtp;
|
||||||
|
|
||||||
feedAccounts = addId (attrValues profile.feedAccounts);
|
feedAccounts = addId (attrValues profile.feedAccounts);
|
||||||
|
|
||||||
|
|||||||
@@ -84,13 +84,11 @@ in
|
|||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
bash.initExtra = lib.mkIf cfg.enableBashIntegration bashIntegration;
|
# $SSH_AUTH_SOCK has to be set early since other tools rely on it
|
||||||
|
bash.profileExtra = lib.mkIf cfg.enableBashIntegration (lib.mkOrder 900 bashIntegration);
|
||||||
zsh.initContent = lib.mkIf cfg.enableZshIntegration bashIntegration;
|
fish.shellInit = lib.mkIf cfg.enableFishIntegration (lib.mkOrder 900 fishIntegration);
|
||||||
|
nushell.extraConfig = lib.mkIf cfg.enableNushellIntegration (lib.mkOrder 900 nushellIntegration);
|
||||||
fish.interactiveShellInit = lib.mkIf cfg.enableFishIntegration fishIntegration;
|
zsh.envExtra = lib.mkIf cfg.enableZshIntegration (lib.mkOrder 900 bashIntegration);
|
||||||
|
|
||||||
nushell.extraConfig = lib.mkIf cfg.enableNushellIntegration nushellIntegration;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -188,10 +188,13 @@ in
|
|||||||
hm-graphical-session = {
|
hm-graphical-session = {
|
||||||
Unit = {
|
Unit = {
|
||||||
Description = "Home Manager X session";
|
Description = "Home Manager X session";
|
||||||
Requires = [
|
Requires =
|
||||||
"graphical-session-pre.target"
|
let
|
||||||
"xdg-desktop-autostart.target"
|
requires = lib.optional (config.xdg.autostart.enable) "xdg-desktop-autostart.target" ++ [
|
||||||
];
|
"graphical-session-pre.target"
|
||||||
|
];
|
||||||
|
in
|
||||||
|
requires;
|
||||||
BindsTo = [
|
BindsTo = [
|
||||||
"graphical-session.target"
|
"graphical-session.target"
|
||||||
"tray.target"
|
"tray.target"
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ in
|
|||||||
backupCommand = mkOption {
|
backupCommand = mkOption {
|
||||||
type = types.nullOr (types.either types.str types.path);
|
type = types.nullOr (types.either types.str types.path);
|
||||||
default = null;
|
default = null;
|
||||||
example = lib.literalExpression "''${pkgs.trash-cli}/bin/trash";
|
example = lib.literalExpression "\${pkgs.trash-cli}/bin/trash";
|
||||||
description = ''
|
description = ''
|
||||||
On activation run this command on each existing file
|
On activation run this command on each existing file
|
||||||
rather than exiting with an error.
|
rather than exiting with an error.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"release": "25.11",
|
"release": "25.11",
|
||||||
"isReleaseBranch": false
|
"isReleaseBranch": true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
{
|
{
|
||||||
description = "Tests of Home Manager for Nix";
|
description = "Tests of Home Manager for Nix";
|
||||||
|
|
||||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
{ nixpkgs, ... }:
|
{ nixpkgs, ... }:
|
||||||
|
|||||||
@@ -4,4 +4,7 @@
|
|||||||
qt-platform-theme-gtk3 = ./qt-platform-theme-gtk3.nix;
|
qt-platform-theme-gtk3 = ./qt-platform-theme-gtk3.nix;
|
||||||
qt-platform-theme-gnome = ./qt-platform-theme-gnome.nix;
|
qt-platform-theme-gnome = ./qt-platform-theme-gnome.nix;
|
||||||
qt-platform-theme-kde6-migration = ./qt-platform-theme-kde6-migration.nix;
|
qt-platform-theme-kde6-migration = ./qt-platform-theme-kde6-migration.nix;
|
||||||
|
qt-qt5ct-settings = ./qt-qt5ct-settings.nix;
|
||||||
|
qt-qt6ct-settings = ./qt-qt6ct-settings.nix;
|
||||||
|
qt-qtct-settings = ./qt-qtct-settings.nix;
|
||||||
}
|
}
|
||||||
|
|||||||
13
tests/modules/misc/qt/qt-qt5ct-settings.nix
Normal file
13
tests/modules/misc/qt/qt-qt5ct-settings.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
qt = {
|
||||||
|
enable = true;
|
||||||
|
qt5ctSettings = {
|
||||||
|
test_section.test_option = "test";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists "home-files/.config/qt5ct/qt5ct.conf"
|
||||||
|
assertPathNotExists "home-files/.config/qt6ct/qt6ct.conf"
|
||||||
|
'';
|
||||||
|
}
|
||||||
13
tests/modules/misc/qt/qt-qt6ct-settings.nix
Normal file
13
tests/modules/misc/qt/qt-qt6ct-settings.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
qt = {
|
||||||
|
enable = true;
|
||||||
|
qt6ctSettings = {
|
||||||
|
test_section.test_option = "test";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists "home-files/.config/qt6ct/qt6ct.conf"
|
||||||
|
assertPathNotExists "home-files/.config/qt5ct/qt5ct.conf"
|
||||||
|
'';
|
||||||
|
}
|
||||||
16
tests/modules/misc/qt/qt-qtct-settings.nix
Normal file
16
tests/modules/misc/qt/qt-qtct-settings.nix
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
qt = {
|
||||||
|
enable = true;
|
||||||
|
qt5ctSettings = {
|
||||||
|
test_section.test_option = "test";
|
||||||
|
};
|
||||||
|
qt6ctSettings = {
|
||||||
|
test_section.test_option = "test";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists "home-files/.config/qt5ct/qt5ct.conf"
|
||||||
|
assertFileExists "home-files/.config/qt6ct/qt6ct.conf"
|
||||||
|
'';
|
||||||
|
}
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
_module.args.pkgs = lib.mkForce realPkgs;
|
_module.args.pkgs = lib.mkForce realPkgs;
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
{
|
{
|
||||||
source = realPkgs.fetchurl {
|
source = realPkgs.fetchurl {
|
||||||
url = "https://keys.openpgp.org/pks/lookup?op=get&options=mr&search=0x44CF42371ADF842E12F116EAA9D3F98FCCF5460B";
|
url = "https://keys.openpgp.org/pks/lookup?op=get&options=mr&search=0x44CF42371ADF842E12F116EAA9D3F98FCCF5460B";
|
||||||
hash = "sha256-bSluCZh6ijwppigk8iF2BwWKZgq1WDbIjyYQRK772dM=";
|
hash = "sha256-csrFDI6QSPfNN+adOPEAupAtspYNBCybFZExvVS+vRY=";
|
||||||
};
|
};
|
||||||
trust = 1; # "unknown"
|
trust = 1; # "unknown"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
programs.command-not-found.enable = true;
|
programs.command-not-found.enable = true;
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ in
|
|||||||
programs.nushell.enable = true;
|
programs.nushell.enable = true;
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
accounts.calendar = {
|
accounts.calendar = {
|
||||||
accounts.caldav = {
|
accounts.mine = {
|
||||||
pimsync.enable = true;
|
pimsync.enable = true;
|
||||||
remote = {
|
remote = {
|
||||||
passwordCommand = [
|
passwordCommand = [
|
||||||
@@ -22,6 +22,22 @@
|
|||||||
basePath = ".local/state/calendar";
|
basePath = ".local/state/calendar";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
accounts.contact = {
|
||||||
|
accounts.mine = {
|
||||||
|
pimsync.enable = true;
|
||||||
|
remote = {
|
||||||
|
passwordCommand = [
|
||||||
|
"pass"
|
||||||
|
"carddav"
|
||||||
|
];
|
||||||
|
type = "carddav";
|
||||||
|
url = "https://carddav.example.com";
|
||||||
|
userName = "bob";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
basePath = ".local/state/contact";
|
||||||
|
};
|
||||||
|
|
||||||
programs.pimsync = {
|
programs.pimsync = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = [
|
settings = [
|
||||||
|
|||||||
@@ -1,14 +1,18 @@
|
|||||||
storage caldav-local {
|
storage calendar-http-local {
|
||||||
fileext .ics
|
|
||||||
path /home/hm-user/.local/state/calendar/caldav
|
|
||||||
type vdir/icalendar
|
|
||||||
}
|
|
||||||
storage http-local {
|
|
||||||
fileext .ics
|
fileext .ics
|
||||||
path /home/hm-user/.local/state/calendar/http
|
path /home/hm-user/.local/state/calendar/http
|
||||||
type vdir/icalendar
|
type vdir/icalendar
|
||||||
}
|
}
|
||||||
storage caldav-remote {
|
storage calendar-mine-local {
|
||||||
|
fileext .ics
|
||||||
|
path /home/hm-user/.local/state/calendar/mine
|
||||||
|
type vdir/icalendar
|
||||||
|
}
|
||||||
|
storage calendar-http-remote {
|
||||||
|
type webcal
|
||||||
|
url https://example.com/calendar
|
||||||
|
}
|
||||||
|
storage calendar-mine-remote {
|
||||||
type caldav
|
type caldav
|
||||||
url https://caldav.example.com
|
url https://caldav.example.com
|
||||||
username alice
|
username alice
|
||||||
@@ -16,16 +20,29 @@ storage caldav-remote {
|
|||||||
cmd pass caldav
|
cmd pass caldav
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
storage http-remote {
|
|
||||||
type webcal
|
|
||||||
url https://example.com/calendar
|
|
||||||
}
|
|
||||||
pair calendar-caldav {
|
|
||||||
storage_a caldav-local
|
|
||||||
storage_b caldav-remote
|
|
||||||
}
|
|
||||||
pair calendar-http {
|
pair calendar-http {
|
||||||
storage_a http-local
|
storage_a calendar-http-local
|
||||||
storage_b http-remote
|
storage_b calendar-http-remote
|
||||||
|
}
|
||||||
|
pair calendar-mine {
|
||||||
|
storage_a calendar-mine-local
|
||||||
|
storage_b calendar-mine-remote
|
||||||
|
}
|
||||||
|
storage contacts-mine-local {
|
||||||
|
fileext .vcf
|
||||||
|
path /home/hm-user/.local/state/contact/mine
|
||||||
|
type vdir/vcard
|
||||||
|
}
|
||||||
|
storage contacts-mine-remote {
|
||||||
|
type carddav
|
||||||
|
url https://carddav.example.com
|
||||||
|
username bob
|
||||||
|
password {
|
||||||
|
cmd pass carddav
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pair contacts-mine {
|
||||||
|
storage_a contacts-mine-local
|
||||||
|
storage_b contacts-mine-remote
|
||||||
}
|
}
|
||||||
status_path /test/dir
|
status_path /test/dir
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,13 @@
|
|||||||
user = "user";
|
user = "user";
|
||||||
sshKey = "/home/user/.ssh/id_rsa";
|
sshKey = "/home/user/.ssh/id_rsa";
|
||||||
};
|
};
|
||||||
|
mount4 = {
|
||||||
|
host = "host4.example.com";
|
||||||
|
mountPoint = "/another/path/somewhere/else";
|
||||||
|
user = "user";
|
||||||
|
authType = "authentication-agent";
|
||||||
|
mountDestPath = "/mnt/host4";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -36,5 +43,8 @@
|
|||||||
assertFileContent \
|
assertFileContent \
|
||||||
home-files/.config/sftpman/mounts/mount3.json \
|
home-files/.config/sftpman/mounts/mount3.json \
|
||||||
${./expected-mount3.json}
|
${./expected-mount3.json}
|
||||||
|
assertFileContent \
|
||||||
|
home-files/.config/sftpman/mounts/mount4.json \
|
||||||
|
${./expected-mount4.json}
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
"beforeMount": "true",
|
"beforeMount": "true",
|
||||||
"host": "host1.example.com",
|
"host": "host1.example.com",
|
||||||
"id": "mount1",
|
"id": "mount1",
|
||||||
|
"mountDestPath": null,
|
||||||
"mountOptions": [
|
"mountOptions": [
|
||||||
"idmap=user"
|
"idmap=user"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
"beforeMount": "true",
|
"beforeMount": "true",
|
||||||
"host": "host2.example.com",
|
"host": "host2.example.com",
|
||||||
"id": "mount2",
|
"id": "mount2",
|
||||||
|
"mountDestPath": null,
|
||||||
"mountOptions": [],
|
"mountOptions": [],
|
||||||
"mountPoint": "/another/path",
|
"mountPoint": "/another/path",
|
||||||
"port": 22,
|
"port": 22,
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
"beforeMount": "true",
|
"beforeMount": "true",
|
||||||
"host": "host3.example.com",
|
"host": "host3.example.com",
|
||||||
"id": "mount3",
|
"id": "mount3",
|
||||||
|
"mountDestPath": null,
|
||||||
"mountOptions": [],
|
"mountOptions": [],
|
||||||
"mountPoint": "/yet/another/path",
|
"mountPoint": "/yet/another/path",
|
||||||
"port": 22,
|
"port": 22,
|
||||||
|
|||||||
12
tests/modules/programs/sftpman/expected-mount4.json
Normal file
12
tests/modules/programs/sftpman/expected-mount4.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"authType": "authentication-agent",
|
||||||
|
"beforeMount": "true",
|
||||||
|
"host": "host4.example.com",
|
||||||
|
"id": "mount4",
|
||||||
|
"mountDestPath": "/mnt/host4",
|
||||||
|
"mountOptions": [],
|
||||||
|
"mountPoint": "/another/path/somewhere/else",
|
||||||
|
"port": 22,
|
||||||
|
"sshKey": "/home/user/.ssh/id_ed25519",
|
||||||
|
"user": "user"
|
||||||
|
}
|
||||||
@@ -120,7 +120,7 @@ user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfa
|
|||||||
user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.port", 456);
|
user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.port", 456);
|
||||||
user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.try_ssl", 3);
|
user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.try_ssl", 3);
|
||||||
user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.username", "home.manager");
|
user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.username", "home.manager");
|
||||||
user_pref("mail.smtpservers", "smtp_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc,smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f");
|
user_pref("mail.smtpservers", "smtp_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc,smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f,smtp_b24ca86ede61ed219e6c87cfec261aae2c72785f812489ea943d114d1f39f55b");
|
||||||
user_pref("privacy.donottrackheader.enabled", true);
|
user_pref("privacy.donottrackheader.enabled", true);
|
||||||
|
|
||||||
user_pref("mail.html_compose", false);
|
user_pref("mail.html_compose", false);
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfa
|
|||||||
user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.port", 456);
|
user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.port", 456);
|
||||||
user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.try_ssl", 3);
|
user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.try_ssl", 3);
|
||||||
user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.username", "home.manager");
|
user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.username", "home.manager");
|
||||||
user_pref("mail.smtpservers", "smtp_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc,smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f");
|
user_pref("mail.smtpservers", "smtp_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc,smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f,smtp_b24ca86ede61ed219e6c87cfec261aae2c72785f812489ea943d114d1f39f55b");
|
||||||
user_pref("privacy.donottrackheader.enabled", true);
|
user_pref("privacy.donottrackheader.enabled", true);
|
||||||
|
|
||||||
user_pref("mail.html_compose", false);
|
user_pref("mail.html_compose", false);
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Needed to avoid error with dummy fish package.
|
# Needed to avoid error with dummy fish package.
|
||||||
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
|
||||||
builtins.toFile "empty" ""
|
builtins.toFile "empty" ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
nmt.script = ''
|
nmt.script = ''
|
||||||
assertFileContains \
|
assertFileContains \
|
||||||
home-files/.bashrc \
|
home-files/.profile \
|
||||||
'export SSH_AUTH_SOCK=$(@getconf-system_cmds@/bin/getconf DARWIN_USER_TEMP_DIR)/ssh-agent'
|
'export SSH_AUTH_SOCK=$(@getconf-system_cmds@/bin/getconf DARWIN_USER_TEMP_DIR)/ssh-agent'
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user