};
};
+ buildPerlPackage = callPackage <nixpkgs/pkgs/development/perl-modules/generic> { };
+ note = buildPerlPackage rec {
+ name = "note-1.3.26";
+ src = fetchurl {
+ url = "mirror://cpan/authors/id/T/TL/TLINDEN/${name}.tar.gz";
+ sha256 = "1h645rnb5vpms48fcyzvp7cwwcbf9k5xq49w2bpniyzzgk2brjrq";
+ };
+ outputs = ["out" "man"];
+ buildInputs = [ perlPackages.YAML ];
+ meta = with stdenv.lib; {
+ description = "A perl script for maintaining notes";
+ homepage = http://www.daemon.de/NOTE;
+ license = licenses.gpl3;
+ maintainers = with maintainers; [ { name = "T.v.Dein"; email = "tlinden@cpan.org"; } ];
+ platforms = platforms.unix;
+ };
+ };
+
+ terminal_velocity = with python2Packages; buildPythonApplication rec {
+ pname = "terminal-velocity-git";
+ version = "0.2.0";
+
+ patches = [
+ # FIXME: update this patch when version changes
+ ./patches/terminal_velocity_fix_build.patch
+ ./patches/terminal_velocity_sort_found_notes.patch
+ ];
+
+ propagatedBuildInputs = [ chardet urwid sh pyyaml ];
+ buildInputs = [ m2r restructuredtext_lint pygments ];
+
+ src = fetchPypi {
+ inherit pname version;
+ sha256 = "13yrkcmvh5h5fwnai61sbmqkrjyisz08n62pq0ada2lyyqf7g6b9";
+ };
+ };
in
{
inherit nix-prefetch-scripts;
inherit ranger;
inherit profanity;
inherit weechat;
+ inherit note terminal_velocity;
#inherit nixos;
}
--- /dev/null
+diff --git a/terminal_velocity/terminal_velocity.py b/terminal_velocity/terminal_velocity.py
+index db2eb05..bb77dc6 100755
+--- a/terminal_velocity/terminal_velocity.py
++++ b/terminal_velocity/terminal_velocity.py
+@@ -75,6 +75,10 @@ the default default will be used"""
+ default=defaults.get("log_file", "~/.tvlog"),
+ help="the file to log to (default: %(default)s)")
+
++ parser.add_argument("-s", "--sort", dest="sort", action="store",
++ default=defaults.get("sort", "date"),
++ help="the note sorting rules. Possible values: date, title (default: %(default)s)")
++
+ parser.add_argument("-p", "--print-config", dest="print_config",
+ action="store_true", default=False,
+ help="print your configuration settings then exit")
+@@ -120,7 +124,7 @@ the default default will be used"""
+ try:
+ urwid_ui.launch(notes_dir=args.notes_dir, editor=args.editor,
+ extension=args.extension, extensions=args.extensions,
+- exclude=args.exclude)
++ exclude=args.exclude, sort=args.sort)
+ except KeyboardInterrupt:
+ # Silence KeyboardInterrupt tracebacks on ctrl-c.
+ sys.exit()
+diff --git a/terminal_velocity/urwid_ui.py b/terminal_velocity/urwid_ui.py
+index 34cf4f6..caebcb9 100644
+--- a/terminal_velocity/urwid_ui.py
++++ b/terminal_velocity/urwid_ui.py
+@@ -237,11 +237,12 @@ class NoteFilterListBox(urwid.ListBox):
+ class MainFrame(urwid.Frame):
+ """The topmost urwid widget."""
+
+- def __init__(self, notes_dir, editor, extension, extensions, exclude=None):
++ def __init__(self, notes_dir, editor, extension, extensions, exclude=None, sort="date"):
+
+ self.editor = editor
+ self.notebook = notebook.PlainTextNoteBook(notes_dir, extension,
+ extensions, exclude=exclude)
++ self.sort = sort
+
+ # Don't filter the note list when the text in the search box changes.
+ self.suppress_filter = False
+@@ -408,7 +409,10 @@ class MainFrame(urwid.Frame):
+
+ # Sort the notes.
+ # TODO: Support different sort orderings.
+- matching_notes.sort(key=lambda x: x.mtime, reverse=True)
++ if self.sort == "title":
++ matching_notes.sort(key=lambda x: x.title)
++ else:
++ matching_notes.sort(key=lambda x: x.mtime, reverse=True)
+
+ # Tell the list box to show only the matching notes.
+ self.list_box.filter(matching_notes)
+@@ -433,10 +437,10 @@ class MainFrame(urwid.Frame):
+ self.selected_note = note
+
+
+-def launch(notes_dir, editor, extension, extensions, exclude=None):
++def launch(notes_dir, editor, extension, extensions, exclude=None, sort="date"):
+ """Launch the user interface."""
+
+- frame = MainFrame(notes_dir, editor, extension, extensions, exclude=exclude)
++ frame = MainFrame(notes_dir, editor, extension, extensions, exclude=exclude, sort=sort)
+ loop = urwid.MainLoop(frame, palette)
+ frame.loop = loop
+ loop.run()