Supertag is a tag-based filesystem, written in Rust, for Linux and MacOS

Overview
Logo

Build Status Docs

Supertag is a tag-based filesystem, written in Rust, for Linux and MacOS. It provides a tag-based view of your files by removing the hierarchy constraints typically imposed on files and folders. In other words, it allows you to think about your files not as objects stored in folders, but as objects that can be filtered by folders.

Intersection

Installation

Linux

curl -Ls https://github.com/amoffat/supertag/releases/latest/download/supertag-x86_64.AppImage > tag
sudo install tag /usr/local/bin

Mac

brew install amoffat/rnd/supertag
Comments
  • Problem tagging multiple files with glob expansion

    Problem tagging multiple files with glob expansion

    Hey, very cool project! I have been looking for a performant file tag organizer and this looks promising. I just have some UX issues I hope can be resolved without too much hassle.

    Tagging multiple files at once My first issue is me wanting to tag multiple files in the same directory using a wildcard. I tried:

    tag ln * escher/art

    Expecting all files in my directory to be added to escher & art tags but instead I got an error:

    Error: IO error: Os { code: 2, kind: NotFound, message: "No such file or directory" }

    cannot reproduce 
    opened by SeanPedersen 15
  • Importing directory hierarchies as tag groups

    Importing directory hierarchies as tag groups

    I think it would be a really useful feature to import existing directory hierarchies as tag groups. By that I mean the following: I have an existing collection of art images, e.g. Wallpapers/art/escher, Wallpapers/art/munch, etc. and I want to import them into my tag collection as tag groups like so: $ cd Wallpapers $ tag ln import .

    This should result in subdirs of art/ being grouped as art+ and files of escher and munch being tagged with their respectives parent dir names. I hope it is clear what I mean, if not I am available for further discussion.

    I can try helping out implementing this as well, though I have little experience with Rust as of now (I code more in Python and TypeScript) but would like to learn more Rust anyway.

    wontfix 
    opened by SeanPedersen 13
  • Does not work on arch linux

    Does not work on arch linux

    $ ./tag -vvv mount -f tmptest
    Mounting to "/mnt/tmptest"
    Error: ExitStatus { cmd: "xdg-open (internal)", status: ExitStatus(ExitStatus(768)), stderr: "XPCOMGlueLoad error for file /usr/lib/firefox/libmozgtk.so:\nlibselinux.so.1: cannot open shared object file: No such file or directory\nCouldn\'t load XPCOM.\nXPCOMGlueLoad error for file /usr/lib/firefox/libmozgtk.so:\nlibselinux.so.1: cannot open shared object file: No such file or directory\nCouldn\'t load XPCOM.\nxdg-open: no method available for opening \'/mnt/tmptest\'\n" }
    
    $ uname -a
    Linux ws 5.9.3-arch1-1 #1 SMP PREEMPT Sun, 01 Nov 2020 12:58:59 +0000 x86_64 GNU/Linux
    

    selinux is required? Should that not be bundled with the appimage?

    bug 
    opened by dgengtek 3
  • Update dependencies

    Update dependencies

    • Update code dependencies except nix
    • supertag, fuse-sys: update nix crate to 0.19.1.

    This PR updates some dependencies for supertag and fuse-sys. The tests run the same, i.e.they all pass except itests::remove::test_remove_and_relink_tag_manual. I didnt try & update the macos-specific deps. I gave up updating bindgen for fuse-sys.

    opened by ngirard 2
  • Mac build broken with latest macfuse: switch to fuser to fix mac build

    Mac build broken with latest macfuse: switch to fuser to fix mac build

    https://github.com/cberner/fuser

    if it wasn't midnight right now, I'd take a look at this myself. as is, I'm likely to forget, so here's an issue so that someone can later discover the need to switch to fuser.

    opened by lahwran 1
  • Error when tagging a file with spaces in filename (NotFound)

    Error when tagging a file with spaces in filename (NotFound)

    I just installed the latest release package of tag, and started tagging my files. However when encountering a file with spaces in the filename, I get the error: Error: IO error: Os { code: 2, kind: NotFound, message: "No such file or directory" }

    $ tag ln SJ3.EXE oldies/sj3
    $ mv SJ3.EXE S\ J3.EXE
    $ tag ln S\ J3.EXE oldies/sj3
    Error: IO error: Os { code: 2, kind: NotFound, message: "No such file or directory" }
    

    Same result if I enclose the filename in double quotes instead of quoting the space with \

    bug 
    opened by TIAcode 1
  • README.rst: simplify installation instructions on Linux

    README.rst: simplify installation instructions on Linux

    • [X] I have signed the CLA

    This PR simplifies the installation instructions on Linux. I'd suggest updating the "Installation" part of the docs too.

    Cheers, and thanks for your work !

    opened by ngirard 1
  • remove file opener

    remove file opener

    https://www.reddit.com/r/rust/comments/k5n0fs/i_made_a_tagbased_filesystem_in_rust/gehfyl1/?utm_source=reddit&utm_medium=web2x&context=3


    Supertag PR

    opened by amoffat 0
  • spaces in file names

    spaces in file names

    Thank you @amoffat for this great thing!

    Are there any reasons to avoid spaces in tag names? As far as I can tell so far, no problems arise. (Of course, tags with spaces in them have to be quoted on the command line.)

    opened by ghost 0
  • documentation typo?

    documentation typo?

    https://amoffat.github.io/supertag/tips_and_tricks.html states:

    However, "stat transparency" means that although person-1 isn't the immediate child of photos, we can treat it as if it was. This means that you can do ls people/person-1/⋂ to list the intersection of those two tags, without needing to go through the people tag group.

    Should this be: ls photos/person-1/⋂ ?

    opened by jhnc 0
  • chaining exclusions results in no files being excluded

    chaining exclusions results in no files being excluded

    eg. given this setup:

    # install current release version as of this issue
    curl -Ls https://github.com/amoffat/supertag/releases/download/v0.1.4/supertag-x86_64.AppImage > /tmp/tag-0.1.4
    chmod +x /tmp/tag-0.1.4
    function tag() { /tmp/tag-0.1.4 "$@"; }
    
    # make a debug collection
    cd /mnt # change to your base (mine is ~)
    sudo mkdir -p supertagdebug
    sudo chown $USER:$USER supertagdebug
    tag mount supertagdebug
    cd supertagdebug
    

    this test case fails:

    touch /tmp/{a1,a2,ab,b1,b2,c1}
    tag ln /tmp/{a1,a2,ab,b1,b2,c} $PWD/basetag/
    tag ln /tmp/{a1,a2,ab} $PWD/basetag/a
    tag ln /tmp/{ab,b1,b2} $PWD/basetag/b
    tag ln /tmp/c1 $PWD/basetag/c
    
    echo "actual:"
    ls basetag/-a/-b/_/
    echo "actual vs expected:"
    diff <(ls basetag/-a/-b/_/) - << EXPECTED
    c1
    EXPECTED
    echo "actual vs no filtering:"
    diff <(ls basetag/-a/-b/_/) <(ls basetag/_/)
    

    I get the output:

    actual:
    a1
    a2
    b1
    b2
    c1
    actual vs expected:
    1,4d0
    < a1
    < a2
    < b1
    < b2
    actual vs no filtering:
    2a3
    > ab
    

    it seems to be excluding the intersection of the intersected tags, rather than individually excluding each separate exclude tag.

    opened by lahwran 1
  • Publish fuse-sys on crates.io

    Publish fuse-sys on crates.io

    Apparently that's needed for cargo package to work. Ran into that while trying to package Supertag for Guix.

    And again, I am not thrilled to have to through GitHub to report issues.

    opened by raingloom 2
  • Unable to compile or install supertag with macFUSE 4.0.5

    Unable to compile or install supertag with macFUSE 4.0.5

    I have manually installed MacFUSE 4.0.5; homebrew casks only have 3.11.2.

    Running brew install amoffat/rnd/supertag as directed in the docs produced this error:

    Warning: Calling depends_on :osxfuse is deprecated! There is no replacement.
    Please report this issue to the amoffat/rnd tap (not Homebrew/brew or Homebrew/core):
      /usr/local/Homebrew/Library/Taps/amoffat/homebrew-rnd/supertag.rb:8
    

    I've opened https://github.com/amoffat/homebrew-rnd/issues/1 for that.

    Next, I tried to install supertag using cargo, but there was a compilation error:

      thread 'main' panicked at 'Invalid version of osxfuse: Failure { command: "\"pkg-config\" \"--libs\" \"--cflags\" \"osxfuse\" \"osxfuse >= 2.6.0\"", output: Output { status: ExitStatus(ExitStatus(256)), stdout: "", stderr: "Package osxfuse was not found in the pkg-config search path.\nPerhaps you should add the directory containing `osxfuse.pc\'\nto the PKG_CONFIG_PATH environment variable\nNo package \'osxfuse\' found\nPackage osxfuse was not found in the pkg-config search path.\nPerhaps you should add the directory containing `osxfuse.pc\'\nto the PKG_CONFIG_PATH environment variable\nNo package \'osxfuse\' found\n" } }', fuse-sys/build.rs:36:10
    

    According to the MacFUSE release notes, the library is now simply named fuse, rather than osxfuse. So I edited fuse-sys/build.rs to change osxfuse to fuse on line 27 and then I got a new build error and decided this was beyond my current knowledge.

    opened by inklesspen 5
Releases(v0.1.4)
Owner
Andrew Moffat
Tech Generalist
Andrew Moffat
The reference implementation of the Linux FUSE (Filesystem in Userspace) interface

libfuse About FUSE (Filesystem in Userspace) is an interface for userspace programs to export a filesystem to the Linux kernel. The FUSE project consi

null 4.2k Jan 4, 2023
Spacedrive is an open source cross-platform file explorer, powered by a virtual distributed filesystem written in Rust.

Spacedrive A file explorer from the future. spacedrive.com » Download for macOS · Windows · Linux · iOS · watchOS · Android ~ Links will be added once

Spacedrive 16.2k Jan 7, 2023
A Tauri Plugin to watch the filesystem for changes

Tauri Plugin FSWatch This plugin provides a "classical" Tauri Plugin Interface to watch changes on files and directories through notify. Architecture

Tauri 36 Jan 5, 2023
A virtual filesystem layer for WASI

wasi-vfs A virtual filesystem layer for WASI. NOTICE: This project currently supports only WASI applications on the top of wasi-libc This project prov

Yuta Saito 72 Dec 29, 2022
Utilities for tokio/tokio-uring based async IO

dbs-fuse The dbs-fuse is a utility crate to support fuse-backend-rs. Wrappers for Rust async io It's challenging to support Rust async io, and it's ev

OpenAnolis Community 6 Oct 23, 2022
ezio offers an easy to use IO API for reading and writing to files and stdio

ezio - a crate for easy IO ezio offers an easy to use IO API for reading and writing to files and stdio. ezio includes utilities for generating random

Nick Cameron 98 Dec 21, 2022
ergonomic paths and files in rust

path_abs: ergonomic paths and files in rust. This library aims to provide ergonomic path and file operations to rust with reasonable performance. See

Rett Berg 45 Oct 29, 2022
Expanding opportunities standard library std::fs and std::io

fs_extra A Rust library that provides additional functionality not present in std::fs. Documentation Migrations to 1.x.x version Key features: Copy fi

Denis Kurilenko 163 Dec 30, 2022
Merge together and efficiently time-sort compressed .pcap files stored in AWS S3 object storage (or locally) to stdout for pipelined processing.

Merge together and efficiently time-sort compressed .pcap files stored in AWS S3 object storage (or locally) to stdout for pipelined processing. High performance and parallel implementation for > 10 Gbps playback throughput with large numbers of files (~4k).

null 4 Aug 19, 2022
rswatch 🔎 is simple, efficient and reliable file watcher.

rswatch File watcher rswatch is a simple, reliable and efficient file watcher, it can watch a single file or a directory and run arbitrary commands wh

Eugene 3 Sep 23, 2022
Minty is an amazingly fast file deduplication app built in rust with a rust user interface.

minty Project Minty has a new look and feel!!! Minty is an amazingly fast file deduplication app built in rust with a rust user interface. I say super

null 26 Nov 20, 2022
High level FFI binding around the sys mount & umount2 calls, for Rust

sys-mount High level FFI bindings to the mount and umount2 system calls, for Rust. Examples Mount This is how the mount command could be written with

Pop!_OS 31 Dec 9, 2022
Temporary directory management for Rust

tempdir A Rust library for creating a temporary directory and deleting its entire contents when the directory is dropped. Documentation Deprecation No

null 132 Jan 7, 2023
Temporary file library for rust

tempfile A secure, cross-platform, temporary file library for Rust. In addition to creating temporary files, this library also allows users to securel

Steven Allen 782 Dec 27, 2022
Extended attribute library for rust.

xattr A small library for setting, getting, and listing extended attributes. Supported Platforms: Linux, MacOS, FreeBSD, and NetBSD. API Documentation

Steven Allen 33 Nov 12, 2022
Rust implemention of Ascon

Ascon Pure Rust implementation of the lightweight Authenticated Encryption and Associated Data (AEAD) Ascon-128 and Ascon-128a. Security Notes This cr

Sebastian Ramacher 4 May 28, 2022
Lightweight Google Cloud Storage sync Rust Client with better performance than gsutil rsync

gcs-rsync Lightweight and efficient Rust gcs rsync for Google Cloud Storage. gcs-sync is faster than gsutil rsync when files change a lot while perfor

@cboudereau 4 Sep 8, 2022
A POSIX select I/O Multiplexing Rust library.

A POSIX select I/O Multiplexing Rust library.

b23r0 4 Jul 6, 2022