Compare commits
36 commits
master
...
release-19
Author | SHA1 | Date | |
---|---|---|---|
b78b5fa4a0 | |||
7aa2bd5bf4 | |||
57f3b72d3a | |||
0d1ca254d0 | |||
3166ae7993 | |||
2b71762384 | |||
1261ffee91 | |||
f5c9303ced | |||
8d663335eb | |||
72400b2c29 | |||
1d38ffc372 | |||
10d2c4e7e4 | |||
b646623a39 | |||
af2303526d | |||
11f8b1c1ce | |||
94c0367dd8 | |||
24c6d8dfc5 | |||
8fb1ed5919 | |||
829b688827 | |||
9e69b0d8b9 | |||
9bdfdfe14e | |||
b41fc9e6e8 | |||
5e7a4c55ed | |||
22076437f3 | |||
0d7b515a65 | |||
eafc8897e6 | |||
415f12bae5 | |||
06f1b13c21 | |||
a0653a7fb0 | |||
dff5f07952 | |||
b905de5833 | |||
ecf333d27a | |||
e413a1408e | |||
06ae8792e7 | |||
f856c78a4a | |||
31e84945d5 |
|
@ -9,7 +9,7 @@ Run tests:
|
|||
script:
|
||||
- nix-shell tests -A run.files-text
|
||||
only:
|
||||
- master
|
||||
- release-19.09
|
||||
|
||||
pages:
|
||||
stage: deploy
|
||||
|
@ -34,4 +34,4 @@ Deploy NUR:
|
|||
project: rycee/nur-expressions
|
||||
branch: master
|
||||
only:
|
||||
- master
|
||||
- release-19.09
|
||||
|
|
|
@ -139,15 +139,18 @@ If you do have a change worthy of a news entry then please add one in
|
|||
> use 'services.myservice.bar' instead.
|
||||
|
||||
- A new module, say `foo.nix`, should always include a news entry
|
||||
(without any condition) that has a message along the lines of
|
||||
that has a message along the lines of
|
||||
|
||||
> A new service is available: 'services.foo'.
|
||||
> A new module is available: 'services.foo'.
|
||||
|
||||
or
|
||||
If the module is platform specific, e.g., a service module using
|
||||
systemd, then a condition like
|
||||
|
||||
> A new program configuration is available: 'program.foo'.
|
||||
```
|
||||
condition = hostPlatform.isLinux;
|
||||
```
|
||||
|
||||
depending on the type of module.
|
||||
should be added.
|
||||
|
||||
[open issues]: https://github.com/rycee/home-manager/issues
|
||||
[new issue]: https://github.com/rycee/home-manager/issues/new
|
||||
|
|
30
FAQ.md
30
FAQ.md
|
@ -119,3 +119,33 @@ The solution on NixOS is to add
|
|||
services.dbus.packages = with pkgs; [ gnome3.dconf ];
|
||||
|
||||
to your system configuration.
|
||||
|
||||
How do I install packages from Nixpkgs unstable?
|
||||
------------------------------------------------
|
||||
|
||||
If you are using a stable version of Nixpkgs but would like to install
|
||||
some particular packages from Nixpkgs unstable then you can import the
|
||||
unstable Nixpkgs and refer to its packages within your configuration.
|
||||
Something like
|
||||
|
||||
```nix
|
||||
{ pkgs, config, ... }:
|
||||
|
||||
let
|
||||
|
||||
pkgsUnstable = import <nixpkgs-unstable> {};
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
home.packages = [
|
||||
pkgsUnstable.foo
|
||||
];
|
||||
|
||||
# …
|
||||
}
|
||||
```
|
||||
|
||||
should work provided you have a Nix channel called `nixpkgs-unstable`.
|
||||
Note, the package will not be affected by any package overrides,
|
||||
overlays, etc.
|
||||
|
|
|
@ -19,7 +19,7 @@ will write to your dconf store and cannot tell whether a configuration
|
|||
that it is about to be overwrite was from a previous Home Manager
|
||||
generation or from manual configuration.
|
||||
|
||||
Home Manager targets [NixOS][] unstable and NixOS version 19.03 (the
|
||||
Home Manager targets [NixOS][] unstable and NixOS version 19.09 (the
|
||||
current stable version), it may or may not work on other Linux
|
||||
distributions and NixOS versions.
|
||||
|
||||
|
@ -72,11 +72,11 @@ Currently the easiest way to install Home Manager is as follows:
|
|||
if you are following Nixpkgs master or an unstable channel and
|
||||
|
||||
```console
|
||||
$ nix-channel --add https://github.com/rycee/home-manager/archive/release-19.03.tar.gz home-manager
|
||||
$ nix-channel --add https://github.com/rycee/home-manager/archive/release-19.09.tar.gz home-manager
|
||||
$ nix-channel --update
|
||||
```
|
||||
|
||||
if you follow a Nixpkgs version 19.03 channel.
|
||||
if you follow a Nixpkgs version 19.09 channel.
|
||||
|
||||
On NixOS you may need to log out and back in for the channel to
|
||||
become available. On non-NixOS you may have to add
|
||||
|
|
|
@ -79,11 +79,11 @@
|
|||
if you are following Nixpkgs master or an unstable channel and
|
||||
</para>
|
||||
<screen>
|
||||
<prompt>$</prompt> <userinput>nix-channel --add https://github.com/rycee/home-manager/archive/release-19.03.tar.gz home-manager</userinput>
|
||||
<prompt>$</prompt> <userinput>nix-channel --add https://github.com/rycee/home-manager/archive/release-19.09.tar.gz home-manager</userinput>
|
||||
<prompt>$</prompt> <userinput>nix-channel --update</userinput>
|
||||
</screen>
|
||||
<para>
|
||||
if you follow a Nixpkgs version 19.03 channel.
|
||||
if you follow a Nixpkgs version 19.09 channel.
|
||||
</para>
|
||||
<para>
|
||||
On NixOS you may need to log out and back in for the channel to become
|
||||
|
@ -169,12 +169,12 @@ $HOME/.nix-profile/etc/profile.d/hm-session-vars.sh
|
|||
</para>
|
||||
|
||||
<screen>
|
||||
<prompt>#</prompt> <userinput>nix-channel --add https://github.com/rycee/home-manager/archive/release-19.03.tar.gz home-manager</userinput>
|
||||
<prompt>#</prompt> <userinput>nix-channel --add https://github.com/rycee/home-manager/archive/release-19.09.tar.gz home-manager</userinput>
|
||||
<prompt>#</prompt> <userinput>nix-channel --update</userinput>
|
||||
</screen>
|
||||
|
||||
<para>
|
||||
if you follow a Nixpkgs version 19.03 channel.
|
||||
if you follow a Nixpkgs version 19.09 channel.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -251,12 +251,12 @@ home-manager.useUserPackages = true;
|
|||
</para>
|
||||
|
||||
<screen>
|
||||
<prompt>#</prompt> <userinput>nix-channel --add https://github.com/rycee/home-manager/archive/release-19.03.tar.gz home-manager</userinput>
|
||||
<prompt>#</prompt> <userinput>nix-channel --add https://github.com/rycee/home-manager/archive/release-19.09.tar.gz home-manager</userinput>
|
||||
<prompt>#</prompt> <userinput>nix-channel --update</userinput>
|
||||
</screen>
|
||||
|
||||
<para>
|
||||
if you follow a Nixpkgs version 19.03 channel.
|
||||
if you follow a Nixpkgs version 19.09 channel.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
|
|
@ -1,8 +1,20 @@
|
|||
[[sec-release-19.09]]
|
||||
== Release 19.09 (unreleased)
|
||||
== Release 19.09
|
||||
|
||||
This is the current unstable branch and the information in this
|
||||
section is therefore not final.
|
||||
The 19.09 release branch became the stable branch in October, 2019.
|
||||
|
||||
[[sec-release-19.09-highlights]]
|
||||
=== Highlights
|
||||
|
||||
This release has the following notable changes:
|
||||
|
||||
* The <<opt-programs.firefox.enableGoogleTalk>> and
|
||||
<<opt-programs.firefox.enableIcedTea>> options are now deprecated
|
||||
and will only work if Firefox ESR 52.x is used.
|
||||
|
||||
* The `home-manager` tool now provides an `uninstall` sub-command that
|
||||
can be used to uninstall Home Manager, if used in the standalone
|
||||
mode. That is, not as a NixOS module.
|
||||
|
||||
[[sec-release-19.09-state-version-changes]]
|
||||
=== State Version Changes
|
||||
|
|
|
@ -93,14 +93,14 @@ function doBuildAttr() {
|
|||
nix build \
|
||||
-f "<home-manager/home-manager/home-manager.nix>" \
|
||||
$extraArgs \
|
||||
${PASSTHROUGH_OPTS[*]} \
|
||||
"${PASSTHROUGH_OPTS[@]}" \
|
||||
--argstr confPath "$HOME_MANAGER_CONFIG" \
|
||||
--argstr confAttr "$HOME_MANAGER_CONFIG_ATTRIBUTE"
|
||||
else
|
||||
nix-build \
|
||||
"<home-manager/home-manager/home-manager.nix>" \
|
||||
$extraArgs \
|
||||
${PASSTHROUGH_OPTS[*]} \
|
||||
"${PASSTHROUGH_OPTS[@]}" \
|
||||
--argstr confPath "$HOME_MANAGER_CONFIG" \
|
||||
--argstr confAttr "$HOME_MANAGER_CONFIG_ATTRIBUTE"
|
||||
fi
|
||||
|
|
|
@ -21,6 +21,16 @@ runCommand
|
|||
{
|
||||
# Let Home Manager install and manage itself.
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
# This value determines the Home Manager release that your
|
||||
# configuration is compatible with. This helps avoid breakage
|
||||
# when a new Home Manager release introduces backwards
|
||||
# incompatible changes.
|
||||
#
|
||||
# You can update Home Manager without changing this value. See
|
||||
# the Home Manager release notes for a list of state version
|
||||
# changes in each release.
|
||||
home.stateVersion = "19.09";
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
|
|
|
@ -23,10 +23,6 @@ let
|
|||
then file.source
|
||||
else builtins.path { path = file.source; name = sourceName; };
|
||||
|
||||
# A symbolic link whose target path matches this pattern will be
|
||||
# considered part of a Home Manager generation.
|
||||
homeFilePattern = "${builtins.storeDir}/*-home-manager-files/*";
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
@ -49,16 +45,40 @@ in
|
|||
# overwrite an existing file.
|
||||
home.activation.checkLinkTargets = dag.entryBefore ["writeBoundary"] (
|
||||
let
|
||||
# Paths that should be forcibly overwritten by Home Manager.
|
||||
# Caveat emptor!
|
||||
forcedPaths =
|
||||
concatMapStringsSep " " (p: ''"$HOME/${p}"'')
|
||||
(mapAttrsToList (n: v: v.target)
|
||||
(filterAttrs (n: v: v.force) cfg));
|
||||
|
||||
check = pkgs.writeText "check" ''
|
||||
. ${./lib-bash/color-echo.sh}
|
||||
|
||||
# A symbolic link whose target path matches this pattern will be
|
||||
# considered part of a Home Manager generation.
|
||||
homeFilePattern="$(readlink -e "${builtins.storeDir}")/*-home-manager-files/*"
|
||||
|
||||
forcedPaths=(${forcedPaths})
|
||||
|
||||
newGenFiles="$1"
|
||||
shift
|
||||
for sourcePath in "$@" ; do
|
||||
relativePath="''${sourcePath#$newGenFiles/}"
|
||||
targetPath="$HOME/$relativePath"
|
||||
if [[ -e "$targetPath" \
|
||||
&& ! "$(readlink "$targetPath")" == ${homeFilePattern} ]] ; then
|
||||
|
||||
forced=""
|
||||
for forcedPath in "''${forcedPaths[@]}"; do
|
||||
if [[ $targetPath == $forcedPath* ]]; then
|
||||
forced="yeah"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ -n $forced ]]; then
|
||||
$VERBOSE_ECHO "Skipping collision check for $targetPath"
|
||||
elif [[ -e "$targetPath" \
|
||||
&& ! "$(readlink "$targetPath")" == $homeFilePattern ]] ; then
|
||||
if [[ ! -L "$targetPath" && -n "$HOME_MANAGER_BACKUP_EXT" ]] ; then
|
||||
backup="$targetPath.$HOME_MANAGER_BACKUP_EXT"
|
||||
if [[ -e "$backup" ]]; then
|
||||
|
@ -133,13 +153,17 @@ in
|
|||
cleanup = pkgs.writeText "cleanup" ''
|
||||
. ${./lib-bash/color-echo.sh}
|
||||
|
||||
# A symbolic link whose target path matches this pattern will be
|
||||
# considered part of a Home Manager generation.
|
||||
homeFilePattern="$(readlink -e "${builtins.storeDir}")/*-home-manager-files/*"
|
||||
|
||||
newGenFiles="$1"
|
||||
shift 1
|
||||
for relativePath in "$@" ; do
|
||||
targetPath="$HOME/$relativePath"
|
||||
if [[ -e "$newGenFiles/$relativePath" ]] ; then
|
||||
$VERBOSE_ECHO "Checking $targetPath: exists"
|
||||
elif [[ ! "$(readlink "$targetPath")" == ${homeFilePattern} ]] ; then
|
||||
elif [[ ! "$(readlink "$targetPath")" == $homeFilePattern ]] ; then
|
||||
warnEcho "Path '$targetPath' not link into Home Manager generation. Skipping delete."
|
||||
else
|
||||
$VERBOSE_ECHO "Checking $targetPath: gone (deleting)"
|
||||
|
@ -236,6 +260,9 @@ in
|
|||
(''
|
||||
mkdir -p $out
|
||||
|
||||
# Needed in case /nix is a symbolic link.
|
||||
realOut="$(realpath -m "$out")"
|
||||
|
||||
function insertFile() {
|
||||
local source="$1"
|
||||
local relTarget="$2"
|
||||
|
@ -244,10 +271,10 @@ in
|
|||
|
||||
# Figure out the real absolute path to the target.
|
||||
local target
|
||||
target="$(realpath -m "$out/$relTarget")"
|
||||
target="$(realpath -m "$realOut/$relTarget")"
|
||||
|
||||
# Target path must be within $HOME.
|
||||
if [[ ! $target == $out* ]] ; then
|
||||
if [[ ! $target == $realOut* ]] ; then
|
||||
echo "Error installing file '$relTarget' outside \$HOME" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
@ -86,6 +86,18 @@ in
|
|||
into place.
|
||||
'';
|
||||
};
|
||||
|
||||
force = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
visible = false;
|
||||
description = ''
|
||||
Whether the target path should be unconditionally replaced
|
||||
by the managed file source. Warning, this will silently
|
||||
delete the target regardless of whether it is a file or
|
||||
link.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
|
|
|
@ -1207,6 +1207,47 @@ in
|
|||
A new module is available: 'programs.rtorrent'.
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
time = "2019-12-10T19:58:00+00:00";
|
||||
condition = hostPlatform.isLinux;
|
||||
message = ''
|
||||
A new module is available: 'services.lorri'.
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
time = "2020-02-16T17:07:44+00:00";
|
||||
message = ''
|
||||
A new module is available: 'programs.readline'.
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
time = "2020-03-15T16:55:28+00:00";
|
||||
condition = config.programs.firefox.enable;
|
||||
message = ''
|
||||
In anticipation of Firefox dropping support for extension
|
||||
sideloading[1], we now install extensions directly to
|
||||
Firefox profiles managed through Home Manager's
|
||||
|
||||
'programs.firefox.profiles'
|
||||
|
||||
option.
|
||||
|
||||
Unfortunately this will most likely trigger an "Existing
|
||||
file is in the way" error when activating your configuration
|
||||
since Firefox keeps a copy of the add-on in the location
|
||||
Home Manager wants to overwrite. If this is the case, remove
|
||||
the listed '.xpi' files and try again.
|
||||
|
||||
This change also means that extensions installed through
|
||||
Home Manager may disappear from unmanaged profiles in future
|
||||
Firefox releases.
|
||||
|
||||
[1] https://blog.mozilla.org/addons/2019/10/31/firefox-to-discontinue-sideloaded-extensions/
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -83,6 +83,7 @@ let
|
|||
(loadModule ./programs/offlineimap.nix { })
|
||||
(loadModule ./programs/opam.nix { })
|
||||
(loadModule ./programs/pidgin.nix { })
|
||||
(loadModule ./programs/readline.nix { })
|
||||
(loadModule ./programs/rofi.nix { })
|
||||
(loadModule ./programs/rtorrent.nix { })
|
||||
(loadModule ./programs/skim.nix { })
|
||||
|
@ -114,6 +115,7 @@ let
|
|||
(loadModule ./services/kdeconnect.nix { })
|
||||
(loadModule ./services/keepassx.nix { })
|
||||
(loadModule ./services/keybase.nix { })
|
||||
(loadModule ./services/lorri.nix { condition = hostPlatform.isLinux; })
|
||||
(loadModule ./services/mbsync.nix { })
|
||||
(loadModule ./services/mpd.nix { })
|
||||
(loadModule ./services/mpdris2.nix { condition = hostPlatform.isLinux; })
|
||||
|
|
|
@ -20,9 +20,9 @@ let
|
|||
sendmail = astroid.sendMailCommand;
|
||||
additional_sent_tags = "";
|
||||
default = boolOpt primary;
|
||||
save_drafts_to = folders.drafts;
|
||||
save_drafts_to = "${maildir.absPath}/${folders.drafts}";
|
||||
save_sent = "true";
|
||||
save_sent_to = folders.sent;
|
||||
save_sent_to = "${maildir.absPath}/${folders.sent}";
|
||||
select_query = "";
|
||||
}
|
||||
// optionalAttrs (signature.showSignature != "none") {
|
||||
|
@ -106,14 +106,6 @@ in
|
|||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = config.programs.notmuch.maildir.synchronizeFlags;
|
||||
message = "The astroid module requires"
|
||||
+ " 'programs.notmuch.maildir.synchronizeFlags = true'.";
|
||||
}
|
||||
];
|
||||
|
||||
home.packages = [ pkgs.astroid ];
|
||||
|
||||
xdg.configFile."astroid/config".source =
|
||||
|
|
|
@ -12,7 +12,7 @@ let
|
|||
# overrides.
|
||||
emacsPackages =
|
||||
let
|
||||
epkgs = pkgs.emacsPackagesNgGen cfg.package;
|
||||
epkgs = pkgs.emacsPackagesGen cfg.package;
|
||||
in
|
||||
epkgs.overrideScope' cfg.overrides;
|
||||
emacsWithPackages = emacsPackages.emacsWithPackages;
|
||||
|
@ -42,7 +42,7 @@ in
|
|||
description = ''
|
||||
Extra packages available to Emacs. To get a list of
|
||||
available packages run:
|
||||
<command>nix-env -f '<nixpkgs>' -qaP -A emacsPackagesNg</command>.
|
||||
<command>nix-env -f '<nixpkgs>' -qaP -A emacsPackages</command>.
|
||||
'';
|
||||
};
|
||||
|
||||
|
|
|
@ -6,8 +6,21 @@ let
|
|||
|
||||
cfg = config.programs.firefox;
|
||||
|
||||
mozillaConfigPath = ".mozilla";
|
||||
|
||||
firefoxConfigPath = "${mozillaConfigPath}/firefox";
|
||||
|
||||
profilesPath = firefoxConfigPath;
|
||||
|
||||
# The extensions path shared by all profiles; will not be supported
|
||||
# by future Firefox versions.
|
||||
extensionPath = "extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
|
||||
|
||||
extensionsEnvPkg = pkgs.buildEnv {
|
||||
name = "hm-firefox-extensions";
|
||||
paths = cfg.extensions;
|
||||
};
|
||||
|
||||
profiles =
|
||||
flip mapAttrs' cfg.profiles (_: profile:
|
||||
nameValuePair "Profile${toString profile.id}" {
|
||||
|
@ -250,32 +263,31 @@ in
|
|||
|
||||
home.file = mkMerge (
|
||||
[{
|
||||
".mozilla/${extensionPath}" = mkIf (cfg.extensions != []) (
|
||||
let
|
||||
extensionsEnv = pkgs.buildEnv {
|
||||
name = "hm-firefox-extensions";
|
||||
paths = cfg.extensions;
|
||||
};
|
||||
in {
|
||||
source = "${extensionsEnv}/share/mozilla/${extensionPath}";
|
||||
"${mozillaConfigPath}/${extensionPath}" = mkIf (cfg.extensions != []) {
|
||||
source = "${extensionsEnvPkg}/share/mozilla/${extensionPath}";
|
||||
recursive = true;
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
".mozilla/firefox/profiles.ini" = mkIf (cfg.profiles != {}) {
|
||||
"${firefoxConfigPath}/profiles.ini" = mkIf (cfg.profiles != {}) {
|
||||
text = profilesIni;
|
||||
};
|
||||
}]
|
||||
++ flip mapAttrsToList cfg.profiles (_: profile: {
|
||||
".mozilla/firefox/${profile.path}/chrome/userChrome.css" =
|
||||
"${profilesPath}/${profile.path}/chrome/userChrome.css" =
|
||||
mkIf (profile.userChrome != "") {
|
||||
text = profile.userChrome;
|
||||
};
|
||||
|
||||
".mozilla/firefox/${profile.path}/user.js" =
|
||||
"${profilesPath}/${profile.path}/user.js" =
|
||||
mkIf (profile.settings != {} || profile.extraConfig != "") {
|
||||
text = mkUserJs profile.settings profile.extraConfig;
|
||||
};
|
||||
|
||||
"${profilesPath}/${profile.path}/extensions" = mkIf (cfg.extensions != []) {
|
||||
source = "${extensionsEnvPkg}/share/mozilla/${extensionPath}";
|
||||
recursive = true;
|
||||
force = true;
|
||||
};
|
||||
})
|
||||
);
|
||||
};
|
||||
|
|
|
@ -31,6 +31,7 @@ let
|
|||
[retriever]
|
||||
type = ${retrieverType}
|
||||
server = ${imap.host}
|
||||
${optionalString (imap.port != null) "port = ${toString imap.port}"}
|
||||
username = ${userName}
|
||||
password_command = (${passCmd})
|
||||
mailboxes = ( ${renderedMailboxes} )
|
||||
|
|
|
@ -540,6 +540,7 @@ let
|
|||
in
|
||||
pkgs.writeText "kakrc" (
|
||||
optionalString (cfg.config != null) cfgStr
|
||||
+ "\n"
|
||||
+ cfg.extraConfig
|
||||
);
|
||||
|
||||
|
|
|
@ -178,11 +178,13 @@ in
|
|||
++ groupsConfig
|
||||
) + "\n";
|
||||
|
||||
home.activation.createMaildir =
|
||||
home.activation = mkIf (mbsyncAccounts != []) {
|
||||
createMaildir =
|
||||
dag.entryBetween [ "linkGeneration" ] [ "writeBoundary" ] ''
|
||||
$DRY_RUN_CMD mkdir -m700 -p $VERBOSE_ARG ${
|
||||
concatMapStringsSep " " (a: a.maildir.absPath) mbsyncAccounts
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ in {
|
|||
enable = mkEnableOption "mpv";
|
||||
|
||||
scripts = mkOption {
|
||||
type = types.listOf types.package;
|
||||
type = with types; listOf (either package str);
|
||||
default = [];
|
||||
example = literalExample "[ pkgs.mpvScripts.mpris ]";
|
||||
description = ''
|
||||
|
|
|
@ -148,8 +148,8 @@ in
|
|||
|
||||
</para><para>
|
||||
|
||||
This option is deprecated. Please use the options <varname>extraConfig</varname>
|
||||
and <varname>plugins</varname> which are mutually exclusive with this option.
|
||||
This option is mutually exclusive with <varname>extraConfig</varname>
|
||||
and <varname>plugins</varname>.
|
||||
'';
|
||||
};
|
||||
|
||||
|
@ -193,11 +193,6 @@ in
|
|||
}
|
||||
];
|
||||
|
||||
warnings = optional (cfg.configure != {}) ''
|
||||
The programs.neovim.configure option is deprecated. Please use
|
||||
extraConfig and package option.
|
||||
'';
|
||||
|
||||
home.packages = [ cfg.finalPackage ];
|
||||
|
||||
programs.neovim.finalPackage = pkgs.wrapNeovim cfg.package {
|
||||
|
|
78
modules/programs/readline.nix
Normal file
78
modules/programs/readline.nix
Normal file
|
@ -0,0 +1,78 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.programs.readline;
|
||||
|
||||
mkSetVariableStr = n: v:
|
||||
let
|
||||
mkValueStr = v:
|
||||
if v == true then "on"
|
||||
else if v == false then "off"
|
||||
else if isInt v then toString v
|
||||
else if isString v then v
|
||||
else abort ("values ${toPretty v} is of unsupported type");
|
||||
in
|
||||
"set ${n} ${mkValueStr v}";
|
||||
|
||||
mkBindingStr = k: v: "\"${k}\": ${v}";
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
options.programs.readline = {
|
||||
enable = mkEnableOption "readline";
|
||||
|
||||
bindings = mkOption {
|
||||
default = {};
|
||||
type = types.attrsOf types.str;
|
||||
example = literalExample ''
|
||||
{ "\\C-h" = "backward-kill-word"; }
|
||||
'';
|
||||
description = "Readline bindings.";
|
||||
};
|
||||
|
||||
variables = mkOption {
|
||||
type = with types; attrsOf (either str (either int bool));
|
||||
default = {};
|
||||
example = { expand-tilde = true; };
|
||||
description = ''
|
||||
Readline customization variable assignments.
|
||||
'';
|
||||
};
|
||||
|
||||
includeSystemConfig = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Whether to include the system-wide configuration.";
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = ''
|
||||
Configuration lines appended unchanged to the end of the
|
||||
<filename>~/.inputrc</filename> file.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.file.".inputrc".text =
|
||||
let
|
||||
configStr = concatStringsSep "\n" (
|
||||
optional cfg.includeSystemConfig "$include /etc/inputrc"
|
||||
++ mapAttrsToList mkSetVariableStr cfg.variables
|
||||
++ mapAttrsToList mkBindingStr cfg.bindings
|
||||
);
|
||||
in
|
||||
''
|
||||
# Generated by Home Manager.
|
||||
|
||||
${configStr}
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -178,7 +178,7 @@ in
|
|||
scrollbar = mkOption {
|
||||
default = null;
|
||||
type = types.nullOr (types.enum [ "off" "left" "right" ]);
|
||||
description = "Scroll to the bottom when the shell generates output.";
|
||||
description = "Scrollbar position.";
|
||||
};
|
||||
|
||||
backgroundColor = mkOption {
|
||||
|
|
|
@ -5,17 +5,20 @@ with lib;
|
|||
{
|
||||
options = {
|
||||
services.blueman-applet = {
|
||||
enable = mkEnableOption ''
|
||||
Blueman applet.
|
||||
|
||||
Note, for the applet to work, 'blueman' package should also be installed system-wide
|
||||
since it requires running 'blueman-mechanism' service activated via dbus.
|
||||
You can add it to the dbus packages in system configuration:
|
||||
|
||||
services.dbus.packages = [ pkgs.blueman ];
|
||||
enable = mkEnableOption "" // {
|
||||
description = ''
|
||||
Whether to enable the Blueman applet.
|
||||
</para><para>
|
||||
Note, for the applet to work, the 'blueman' service should
|
||||
be enabled system-wide. You can enable it in the system
|
||||
configuration using
|
||||
<programlisting language="nix">
|
||||
services.blueman.enable = true;
|
||||
</programlisting>
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.services.blueman-applet.enable {
|
||||
systemd.user.services.blueman-applet = {
|
||||
|
|
58
modules/services/lorri.nix
Normal file
58
modules/services/lorri.nix
Normal file
|
@ -0,0 +1,58 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.services.lorri;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
meta.maintainers = [ maintainers.gerschtli ];
|
||||
|
||||
options = {
|
||||
services.lorri.enable = mkEnableOption "lorri build daemon";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = [ pkgs.lorri ];
|
||||
|
||||
systemd.user = {
|
||||
services.lorri = {
|
||||
Unit = {
|
||||
Description = "lorri build daemon";
|
||||
Requires = "lorri.socket";
|
||||
After = "lorri.socket";
|
||||
RefuseManualStart = true;
|
||||
};
|
||||
|
||||
Service = {
|
||||
ExecStart = "${pkgs.lorri}/bin/lorri daemon";
|
||||
PrivateTmp = true;
|
||||
ProtectSystem = "strict";
|
||||
ProtectHome = "read-only";
|
||||
Restart = "on-failure";
|
||||
Environment =
|
||||
let path = with pkgs; makeSearchPath "bin" [ nix gitMinimal gnutar gzip ];
|
||||
in "PATH=${path}";
|
||||
};
|
||||
};
|
||||
|
||||
sockets.lorri = {
|
||||
Unit = {
|
||||
Description = "Socket for lorri build daemon";
|
||||
};
|
||||
|
||||
Socket = {
|
||||
ListenStream = "%t/lorri/daemon.socket";
|
||||
RuntimeDirectory = "lorri";
|
||||
};
|
||||
|
||||
Install = {
|
||||
WantedBy = [ "sockets.target" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -86,15 +86,21 @@ in
|
|||
xdg.configFile."mpDris2/mpDris2.conf".text = toIni mpdris2Conf;
|
||||
|
||||
systemd.user.services.mpdris2 = {
|
||||
Install = {
|
||||
WantedBy = [ "default.target" ];
|
||||
};
|
||||
|
||||
Unit = {
|
||||
Description = "MPRIS 2 support for MPD";
|
||||
After = [ "graphical-session-pre.target" "mpd.service" ];
|
||||
PartOf = [ "graphical-session.target" ];
|
||||
After = [ "mpd.service" ];
|
||||
};
|
||||
|
||||
Service = {
|
||||
Type = "simple";
|
||||
Restart = "on-failure";
|
||||
RestartSec = "5s";
|
||||
ExecStart = "${cfg.package}/bin/mpDris2";
|
||||
BusName = "org.mpris.MediaPlayer2.mpd";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -22,7 +22,17 @@ in
|
|||
|
||||
options = {
|
||||
services.random-background = {
|
||||
enable = mkEnableOption "random desktop background";
|
||||
enable = mkEnableOption "" // {
|
||||
description = ''
|
||||
Whether to enable random desktop background.
|
||||
</para><para>
|
||||
Note, if you are using NixOS and have set up a custom
|
||||
desktop manager session for Home Manager, then the session
|
||||
configuration must have the <option>bgSupport</option>
|
||||
option set to <literal>true</literal> or the background
|
||||
image set by this module may be overwritten.
|
||||
'';
|
||||
};
|
||||
|
||||
imageDirectory = mkOption {
|
||||
type = types.str;
|
||||
|
|
|
@ -242,15 +242,27 @@ in
|
|||
'';
|
||||
|
||||
ensureRuntimeDir = "XDG_RUNTIME_DIR=\${XDG_RUNTIME_DIR:-/run/user/$(id -u)}";
|
||||
|
||||
systemctl = "${ensureRuntimeDir} ${cfg.systemctlPath}";
|
||||
in
|
||||
''
|
||||
if ${ensureRuntimeDir} ${cfg.systemctlPath} --quiet --user is-system-running 2> /dev/null; then
|
||||
systemdStatus=$(${systemctl} --user is-system-running 2>&1 || true)
|
||||
|
||||
if [[ $systemdStatus == 'running' || $systemdStatus == 'degraded' ]]; then
|
||||
if [[ $systemdStatus == 'degraded' ]]; then
|
||||
warnEcho "The user systemd session is degraded:"
|
||||
${systemctl} --user --state=failed
|
||||
warnEcho "Attempting to reload services anyway..."
|
||||
fi
|
||||
|
||||
${ensureRuntimeDir} \
|
||||
PATH=${dirOf cfg.systemctlPath}:$PATH \
|
||||
${if cfg.startServices then autoReloadCmd else legacyReloadCmd}
|
||||
else
|
||||
echo "User systemd daemon not running. Skipping reload."
|
||||
fi
|
||||
|
||||
unset systemdStatus
|
||||
''
|
||||
);
|
||||
})
|
||||
|
|
|
@ -46,6 +46,7 @@ import nmt {
|
|||
// import ./modules/programs/alacritty
|
||||
// import ./modules/programs/bash
|
||||
// import ./modules/programs/gpg
|
||||
// import ./modules/programs/readline
|
||||
// import ./modules/programs/ssh
|
||||
// import ./modules/programs/tmux
|
||||
// import ./modules/programs/zsh;
|
||||
|
|
|
@ -14,6 +14,16 @@ with lib;
|
|||
profileExtra = "profile extra commands";
|
||||
};
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
xorg = super.xorg // {
|
||||
setxkbmap = super.xorg.setxkbmap // {
|
||||
outPath = "@setxkbmap@";
|
||||
};
|
||||
};
|
||||
})
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.xprofile
|
||||
assertFileContent \
|
||||
|
@ -28,10 +38,7 @@ with lib;
|
|||
assertFileExists home-files/.config/systemd/user/setxkbmap.service
|
||||
assertFileContent \
|
||||
home-files/.config/systemd/user/setxkbmap.service \
|
||||
${pkgs.substituteAll {
|
||||
src = ./basic-setxkbmap-expected.service;
|
||||
inherit (pkgs.xorg) setxkbmap;
|
||||
}}
|
||||
${./basic-setxkbmap-expected.service}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
@ -20,14 +20,21 @@ with lib;
|
|||
profileExtra = "profile extra commands";
|
||||
};
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
xorg = super.xorg // {
|
||||
setxkbmap = super.xorg.setxkbmap // {
|
||||
outPath = "@setxkbmap@";
|
||||
};
|
||||
};
|
||||
})
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.config/systemd/user/setxkbmap.service
|
||||
assertFileContent \
|
||||
home-files/.config/systemd/user/setxkbmap.service \
|
||||
${pkgs.substituteAll {
|
||||
src = ./keyboard-without-layout-expected.service;
|
||||
inherit (pkgs.xorg) setxkbmap;
|
||||
}}
|
||||
${./keyboard-without-layout-expected.service}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
@ -6,6 +6,12 @@ with lib;
|
|||
config = {
|
||||
programs.alacritty.enable = true;
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
alacritty = pkgs.writeScriptBin "dummy-alacritty" "";
|
||||
})
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
assertPathNotExists home-files/.config/alacritty
|
||||
'';
|
||||
|
|
|
@ -23,6 +23,12 @@ with lib;
|
|||
};
|
||||
};
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
alacritty = pkgs.writeScriptBin "dummy-alacritty" "";
|
||||
})
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
assertFileContent \
|
||||
home-files/.config/alacritty/alacritty.yml \
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- mode: sh -*-
|
||||
|
||||
. "@homeDirectory@/.nix-profile/etc/profile.d/hm-session-vars.sh"
|
||||
. "/home/testuser/.nix-profile/etc/profile.d/hm-session-vars.sh"
|
||||
|
||||
export V1="v1"
|
||||
export V2="v2-v1"
|
||||
|
|
|
@ -13,16 +13,13 @@ with lib;
|
|||
};
|
||||
};
|
||||
|
||||
home.homeDirectory = "/home/testuser";
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.profile
|
||||
assertFileContent \
|
||||
home-files/.profile \
|
||||
${
|
||||
pkgs.substituteAll {
|
||||
src = ./session-variables-expected.txt;
|
||||
inherit (config.home) homeDirectory;
|
||||
}
|
||||
}
|
||||
${./session-variables-expected.txt}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
@ -11,6 +11,24 @@ with lib;
|
|||
};
|
||||
};
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
firefox-unwrapped =
|
||||
pkgs.runCommand
|
||||
"firefox-0"
|
||||
{
|
||||
meta.description = "I pretend to be Firefox";
|
||||
preferLocalBuild = true;
|
||||
allowSubstitutes = false;
|
||||
}
|
||||
''
|
||||
mkdir -p "$out/bin"
|
||||
touch "$out/bin/firefox"
|
||||
chmod 755 "$out/bin/firefox"
|
||||
'';
|
||||
})
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
assertFileRegex \
|
||||
home-path/bin/firefox \
|
||||
|
|
|
@ -8,6 +8,24 @@ with lib;
|
|||
|
||||
programs.firefox.enable = true;
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
firefox-unwrapped =
|
||||
pkgs.runCommand
|
||||
"firefox-0"
|
||||
{
|
||||
meta.description = "I pretend to be Firefox";
|
||||
preferLocalBuild = true;
|
||||
allowSubstitutes = false;
|
||||
}
|
||||
''
|
||||
mkdir -p "$out/bin"
|
||||
touch "$out/bin/firefox"
|
||||
chmod 755 "$out/bin/firefox"
|
||||
'';
|
||||
})
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
assertFileRegex \
|
||||
home-path/bin/firefox \
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
[retriever]
|
||||
type = SimpleIMAPSSLRetriever
|
||||
server = imap.example.com
|
||||
port = 993
|
||||
username = home.manager
|
||||
password_command = ('password-command')
|
||||
mailboxes = ( 'INBOX', 'Sent', 'Work' )
|
||||
|
|
|
@ -10,12 +10,15 @@ with lib;
|
|||
home.homeDirectory = "/home/hm-user";
|
||||
|
||||
accounts.email.accounts = {
|
||||
"hm@example.com".getmail = {
|
||||
"hm@example.com" = {
|
||||
getmail = {
|
||||
enable = true;
|
||||
mailboxes = ["INBOX" "Sent" "Work"];
|
||||
destinationCommand = "/bin/maildrop";
|
||||
delete = false;
|
||||
};
|
||||
imap.port = 993;
|
||||
};
|
||||
};
|
||||
|
||||
nmt.script = ''
|
||||
|
|
|
@ -8,6 +8,7 @@ with lib;
|
|||
config = {
|
||||
programs.git = {
|
||||
enable = true;
|
||||
package = pkgs.gitMinimal;
|
||||
userEmail = "hm@example.com";
|
||||
userName = "H. M. Test";
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ config, lib, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
|
@ -6,6 +6,7 @@ with lib;
|
|||
config = {
|
||||
programs.git = {
|
||||
enable = true;
|
||||
package = pkgs.gitMinimal;
|
||||
extraConfig = ''
|
||||
This can be anything.
|
||||
'';
|
||||
|
|
|
@ -24,6 +24,7 @@ in
|
|||
programs.git = mkMerge [
|
||||
{
|
||||
enable = true;
|
||||
package = pkgs.gitMinimal;
|
||||
aliases = {
|
||||
a1 = "foo";
|
||||
a2 = "bar";
|
||||
|
|
3
tests/modules/programs/readline/default.nix
Normal file
3
tests/modules/programs/readline/default.nix
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
readline-using-all-options = ./using-all-options.nix;
|
||||
}
|
31
tests/modules/programs/readline/using-all-options.nix
Normal file
31
tests/modules/programs/readline/using-all-options.nix
Normal file
|
@ -0,0 +1,31 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
config = {
|
||||
programs.readline = {
|
||||
enable = true;
|
||||
|
||||
bindings = { "\\C-h" = "backward-kill-word"; };
|
||||
|
||||
variables = {
|
||||
bell-style = "audible";
|
||||
completion-map-case = true;
|
||||
completion-prefix-display-length = 2;
|
||||
};
|
||||
|
||||
extraConfig = ''
|
||||
$if mode=emacs
|
||||
"\e[1~": beginning-of-line
|
||||
$endif
|
||||
'';
|
||||
};
|
||||
|
||||
nmt.script = ''
|
||||
assertFileContent \
|
||||
home-files/.inputrc \
|
||||
${./using-all-options.txt}
|
||||
'';
|
||||
};
|
||||
}
|
11
tests/modules/programs/readline/using-all-options.txt
Normal file
11
tests/modules/programs/readline/using-all-options.txt
Normal file
|
@ -0,0 +1,11 @@
|
|||
# Generated by Home Manager.
|
||||
|
||||
$include /etc/inputrc
|
||||
set bell-style audible
|
||||
set completion-map-case on
|
||||
set completion-prefix-display-length 2
|
||||
"\C-h": backward-kill-word
|
||||
$if mode=emacs
|
||||
"\e[1~": beginning-of-line
|
||||
$endif
|
||||
|
|
@ -2,16 +2,6 @@
|
|||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
substituteExpected = path: pkgs.substituteAll {
|
||||
src = path;
|
||||
|
||||
sensible_rtp = pkgs.tmuxPlugins.sensible.rtp;
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
config = {
|
||||
programs.tmux = {
|
||||
|
@ -19,10 +9,20 @@ in
|
|||
disableConfirmationPrompt = true;
|
||||
};
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
tmuxPlugins = super.tmuxPlugins // {
|
||||
sensible = super.tmuxPlugins.sensible // {
|
||||
rtp = "@sensible_rtp@";
|
||||
};
|
||||
};
|
||||
})
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.tmux.conf
|
||||
assertFileContent home-files/.tmux.conf \
|
||||
${substituteExpected ./disable-confirmation-prompt.conf}
|
||||
${./disable-confirmation-prompt.conf}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
@ -37,18 +37,18 @@ set -g history-limit 2000
|
|||
# tmuxplugin-logging
|
||||
# ---------------------
|
||||
|
||||
run-shell @tmuxplugin_logging@/share/tmux-plugins/logging/logging.tmux
|
||||
run-shell @tmuxplugin_logging_rtp@
|
||||
|
||||
|
||||
# tmuxplugin-prefix-highlight
|
||||
# ---------------------
|
||||
|
||||
run-shell @tmuxplugin_prefix_highlight@/share/tmux-plugins/prefix-highlight/prefix_highlight.tmux
|
||||
run-shell @tmuxplugin_prefix_highlight_rtp@
|
||||
|
||||
|
||||
# tmuxplugin-fzf-tmux-url
|
||||
# ---------------------
|
||||
|
||||
run-shell @tmuxplugin_fzf_tmux_url@/share/tmux-plugins/fzf-tmux-url/fzf-url.tmux
|
||||
run-shell @tmuxplugin_fzf_tmux_url_rtp@
|
||||
|
||||
# ============================================= #
|
||||
|
|
|
@ -2,19 +2,6 @@
|
|||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
substituteExpected = path: pkgs.substituteAll {
|
||||
src = path;
|
||||
|
||||
tmuxplugin_fzf_tmux_url = pkgs.tmuxPlugins.fzf-tmux-url;
|
||||
tmuxplugin_logging = pkgs.tmuxPlugins.logging;
|
||||
tmuxplugin_prefix_highlight = pkgs.tmuxPlugins.prefix-highlight;
|
||||
tmuxplugin_sensible_rtp = pkgs.tmuxPlugins.sensible.rtp;
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
config = {
|
||||
programs.tmux = {
|
||||
|
@ -32,10 +19,31 @@ in
|
|||
];
|
||||
};
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
tmuxPlugins = super.tmuxPlugins // {
|
||||
fzf-tmux-url = super.tmuxPlugins.fzf-tmux-url // {
|
||||
rtp = "@tmuxplugin_fzf_tmux_url_rtp@";
|
||||
};
|
||||
|
||||
logging = super.tmuxPlugins.logging // {
|
||||
rtp = "@tmuxplugin_logging_rtp@";
|
||||
};
|
||||
|
||||
prefix-highlight = super.tmuxPlugins.prefix-highlight // {
|
||||
rtp = "@tmuxplugin_prefix_highlight_rtp@";
|
||||
};
|
||||
|
||||
sensible = super.tmuxPlugins.sensible // {
|
||||
rtp = "@tmuxplugin_sensible_rtp@";
|
||||
};
|
||||
};
|
||||
})
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.tmux.conf
|
||||
assertFileContent home-files/.tmux.conf \
|
||||
${substituteExpected ./emacs-with-plugins.conf}
|
||||
assertFileContent home-files/.tmux.conf ${./emacs-with-plugins.conf}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,15 +2,7 @@
|
|||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
substituteExpected = path: pkgs.substituteAll {
|
||||
src = path;
|
||||
|
||||
sensible_rtp = pkgs.tmuxPlugins.sensible.rtp;
|
||||
};
|
||||
|
||||
in {
|
||||
{
|
||||
config = {
|
||||
programs.tmux = {
|
||||
aggressiveResize = true;
|
||||
|
@ -21,10 +13,19 @@ in {
|
|||
reverseSplit = true;
|
||||
};
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
tmuxPlugins = super.tmuxPlugins // {
|
||||
sensible = super.tmuxPlugins.sensible // {
|
||||
rtp = "@sensible_rtp@";
|
||||
};
|
||||
};
|
||||
})
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.tmux.conf
|
||||
assertFileContent home-files/.tmux.conf \
|
||||
${substituteExpected ./vi-all-true.conf}
|
||||
assertFileContent home-files/.tmux.conf ${./vi-all-true.conf}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ config, lib, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
|
@ -13,6 +13,12 @@ with lib;
|
|||
};
|
||||
};
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
zsh = pkgs.writeScriptBin "dummy-zsh" "";
|
||||
})
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.zshrc
|
||||
assertFileRegex home-files/.zshrc 'export V1="v1"'
|
||||
|
|
|
@ -0,0 +1,100 @@
|
|||
font pango:monospace 8
|
||||
floating_modifier Mod1
|
||||
new_window normal 2
|
||||
new_float normal 2
|
||||
hide_edge_borders none
|
||||
force_focus_wrapping no
|
||||
focus_follows_mouse yes
|
||||
focus_on_window_activation smart
|
||||
mouse_warping output
|
||||
workspace_layout default
|
||||
|
||||
client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577
|
||||
client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a
|
||||
client.unfocused #333333 #222222 #888888 #292d2e #222222
|
||||
client.urgent #2f343a #900000 #ffffff #900000 #900000
|
||||
client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c
|
||||
client.background #ffffff
|
||||
|
||||
bindsym Mod1+1 workspace 1
|
||||
bindsym Mod1+2 workspace 2
|
||||
bindsym Mod1+3 workspace 3
|
||||
bindsym Mod1+4 workspace 4
|
||||
bindsym Mod1+5 workspace 5
|
||||
bindsym Mod1+6 workspace 6
|
||||
bindsym Mod1+7 workspace 7
|
||||
bindsym Mod1+8 workspace 8
|
||||
bindsym Mod1+9 workspace 9
|
||||
bindsym Mod1+Down focus down
|
||||
bindsym Mod1+Invented invented-key-command
|
||||
bindsym Mod1+Left overridden-command
|
||||
bindsym Mod1+Return exec i3-sensible-terminal
|
||||
|
||||
bindsym Mod1+Shift+1 move container to workspace 1
|
||||
bindsym Mod1+Shift+2 move container to workspace 2
|
||||
bindsym Mod1+Shift+3 move container to workspace 3
|
||||
bindsym Mod1+Shift+4 move container to workspace 4
|
||||
bindsym Mod1+Shift+5 move container to workspace 5
|
||||
bindsym Mod1+Shift+6 move container to workspace 6
|
||||
bindsym Mod1+Shift+7 move container to workspace 7
|
||||
bindsym Mod1+Shift+8 move container to workspace 8
|
||||
bindsym Mod1+Shift+9 move container to workspace 9
|
||||
bindsym Mod1+Shift+Down move down
|
||||
bindsym Mod1+Shift+Left move left
|
||||
bindsym Mod1+Shift+Right move right
|
||||
bindsym Mod1+Shift+Up move up
|
||||
bindsym Mod1+Shift+c reload
|
||||
bindsym Mod1+Shift+e exec i3-nagbar -t warning -m 'Do you want to exit i3?' -b 'Yes' 'i3-msg exit'
|
||||
bindsym Mod1+Shift+q kill
|
||||
bindsym Mod1+Shift+r restart
|
||||
bindsym Mod1+Shift+space floating toggle
|
||||
bindsym Mod1+Up focus up
|
||||
bindsym Mod1+d exec @dmenu@/bin/dmenu_run
|
||||
bindsym Mod1+e layout toggle split
|
||||
bindsym Mod1+f fullscreen toggle
|
||||
bindsym Mod1+h split h
|
||||
bindsym Mod1+r mode resize
|
||||
bindsym Mod1+s layout stacking
|
||||
bindsym Mod1+space focus mode_toggle
|
||||
bindsym Mod1+v split v
|
||||
bindsym Mod1+w layout tabbed
|
||||
|
||||
mode "resize" {
|
||||
bindsym Down resize grow height 10 px or 10 ppt
|
||||
bindsym Escape mode default
|
||||
bindsym Left resize shrink width 10 px or 10 ppt
|
||||
bindsym Return mode default
|
||||
bindsym Right resize grow width 10 px or 10 ppt
|
||||
bindsym Up resize shrink height 10 px or 10 ppt
|
||||
}
|
||||
|
||||
|
||||
bar {
|
||||
|
||||
font pango:monospace 8
|
||||
mode dock
|
||||
hidden_state hide
|
||||
position bottom
|
||||
status_command @i3status@/bin/i3status
|
||||
i3bar_command @i3@/bin/i3bar
|
||||
workspace_buttons yes
|
||||
strip_workspace_numbers no
|
||||
tray_output primary
|
||||
colors {
|
||||
background #000000
|
||||
statusline #ffffff
|
||||
separator #666666
|
||||
focused_workspace #4c7899 #285577 #ffffff
|
||||
active_workspace #333333 #5f676a #ffffff
|
||||
inactive_workspace #333333 #222222 #888888
|
||||
urgent_workspace #2f343a #900000 #ffffff
|
||||
binding_mode #2f343a #900000 #ffffff
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -18,17 +18,26 @@ with lib;
|
|||
};
|
||||
};
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
dmenu = super.dmenu // {
|
||||
outPath = "@dmenu@";
|
||||
};
|
||||
|
||||
i3 = super.i3 // {
|
||||
outPath = "@i3@";
|
||||
};
|
||||
|
||||
i3status = super.i3status // {
|
||||
outPath = "@i3status@";
|
||||
};
|
||||
})
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.config/i3/config
|
||||
|
||||
assertFileRegex home-files/.config/i3/config \
|
||||
'bindsym Mod1+Left overridden-command'
|
||||
|
||||
assertFileNotRegex home-files/.config/i3/config \
|
||||
'Mod1+Right'
|
||||
|
||||
assertFileRegex home-files/.config/i3/config \
|
||||
'bindsym Mod1+Invented invented-key-command'
|
||||
assertFileContent home-files/.config/i3/config \
|
||||
${./i3-keybindings-expected.conf}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue