Skip to content

Commit

Permalink
idk what all this is but it's a lot
Browse files Browse the repository at this point in the history
Signed-off-by: Sam Therapy <sam@samtherapy.net>
  • Loading branch information
SamTherapy committed Mar 26, 2024
1 parent e3d3a96 commit d67d2b9
Show file tree
Hide file tree
Showing 8 changed files with 234 additions and 233 deletions.
119 changes: 0 additions & 119 deletions .github/README.md

This file was deleted.

33 changes: 33 additions & 0 deletions .github/workflows/benckmark.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Benchmarks
on:
push:
branches:
- master

permissions:
contents: write
deployments: write

jobs:
benchmark:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- name: Run Benchmarks
run: dotnet run -c Release --project src/Xdg.Benchmarks --exporters json --framework net8.0

- name: Store Benchmark Result
uses: benchmark-action/github-action-benchmark@v1
with:
name: Benchmark.Net Benchmark
tool: 'benchmarkdotnet'
output-file-path: 'BenchmarkDotNet.Artifacts/results/Program.Benchmarks-report-full.json'
github-token: $ {{ secrets.GITHUB_TOKEN }}
auto-push: true
alert-threshold: '200%'
comment-on-alert: true
fail-on-alert: true
alert-comment-cc-users: '@SamTherapy'
109 changes: 108 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,108 @@
# You should not see this :)
# Xdg.Directories

> A .NET Standard library for the XDG Base Directory Specification and XDG user directories.
[![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/xdg-net/xdg.directories/build-test.yaml?style=for-the-badge&logo=github)](https://github.com/xdg-net/Xdg.Net/actions/workflows/build-test.yaml)
[![NuGet Version](https://img.shields.io/nuget/v/xdg.directories?style=for-the-badge&logo=nuget)](https://www.nuget.org/packages/Xdg.Directories/)
[![MIT License](https://img.shields.io/github/license/xdg-net/xdg.directories?style=for-the-badge)](https://choosealicense.com/licenses/mit/)

Xdg.Net is a ***small*** (the .dll is only 11 KB), [***fast***](./src/Xdg.Benchmarks/README.md) and ***portable*** (Completely supports .NET Standard 2.0 and even NativeAOT!) .NET implementation of the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) and XDG user directories for Windows, MacOS and Linux/FreeBSD.

## Installation

Use [NuGet](http://docs.nuget.org/docs/start-here/installing-nuge) to install [Xdg.Directories](thttps://www.nuget.org/packages/Xdg.Directories).

From the .NET CLI:

```bash
dotnet add package Xdg.Directories
```

or from Visual Studio's package manager:

```pwsh
Install-Package Xdg.Directories
```

### Pre-releases

Preview releases are uploaded to both [GitHub packages](https://github.com/xdg-net/Xdg.Net/pkgs/nuget/Xdg.Directories) (need GitHub account to download) and [Forgejo packages](https://git.froth.zone/mirrors/-/packages/nuget/xdg.directories) (no login required).

## Usage

### Base Directories, C#

```csharp
using System;
using Xdg.Directories;

// Prints /home/$USER/.local/share
Console.Writeline(BaseDirectory.DataHome);

// Prints /home/$USER/.cache
Console.Writeline(BaseDirectory.CacheHome)
```

### User Directories, F#

```fsharp
open Xdg.Directories
// Prints /home/$USER/Documents
printfn "%s" UserDirectory.DesktopDir
```

## Default Locations

If any of the respective XDG environment are specified, the variable will always be returned.
Otherwise, the value depends on the operating system.

Inspiration is taken from the [Go implementation](https://github.com/adrg/xdg) for Windows and MacOS directories.

<details open>
<summary>Base Directory</summary>

| Environment Variable | Windows | macOS | Linux/FreeBSD |
| --- | --- | --- | --- |
| `XDG_DATA_HOME` | `%LOCALAPPDATA%` | `$HOME/Library/Application Support` | `$HOME/.local/share` |
| `XDG_CONFIG_HOME` | `%LOCALAPPDATA%` | `$HOME/Library/Application Support` | `$HOME/.config` |
| `XDG_STATE_HOME` | `%LOCALAPPDATA%` | `$HOME/Library/Application Support` | `$HOME/.local/state` |
| `XDG_BIN_HOME` | `null` | `null` | `$HOME/.local/bin` |
| `XDG_DATA_DIRS` | `%APPDATA%:%PROGRAMDATA%` | `/Library/Application Support` | `/usr/local/share:/usr/share` |
| `XDG_CONFIG_DIRS` | `%LOCALAPPDATA%` | `$HOME/Library/Preferences:/Library/Application Support:/Library/Preferences` | `/etc/xdg` |
| `XDG_CACHE_HOME` | `%LOCALAPPDATA%` | `$HOME/Library/Application Support` | `$HOME/.config` |
| `XDG_RUNTIME_HOME` | `%LOCALAPPDATA%` | `$HOME/Library/Application Support` | `/run/user/$UID` |
</details>

<details open>
<summary>User Directory</summary>

User directories on Windows use [Known Folders](https://learn.microsoft.com/en-us/windows/win32/shell/known-folders).
| Environment Variable | Windows | macOS | Linux/FreeBSD |
| --- | --- | --- | --- |
| `XDG_DESKTOP_DIR` | `Desktop` | `$HOME/Desktop` | `$HOME/Desktop` |
| `XDG_DOWNLOAD_DIR` | `null` | `$HOME/Downloads` | `$HOME/Downloads` |
| `XDG_DOCUMENTS_DIR` | `My Documents` | `$HOME/Documents` | `$HOME/Documents` |
| `XDG_MUSIC_DIR` | `My Music` | `$HOME/Music` | `$HOME/Music` |
| `XDG_PICTURES_DIRS` | `My Pictures` | `$HOME/Pictures` | `$HOME/Pictures` |
| `XDG_VIDEOS_DIR` | `My Videos` | `$HOME/Movies` | `$HOME/Videos` |
| `XDG_TEMPLATES_DIR` | `Templates` | `$HOME/Templates` | `$HOME/Templates` |
| `XDG_PUBLICSHARE_DIR` | `%PUBLIC%` | `$HOME/Public` | `$HOME/Public` |
</details>

<details open>
<summary>Extra Directories</summary>

| | Windows | macOS | Linux/FreeBSD |
| --- | --- | --- | --- |
| Home | `%USERPROFILE%` | `$HOME` | `$HOME` |
</details>

### Native Library (WIP)

[View the README here](./src/Xdg.Directories.FFI/README.md)

## License

[MIT](https://choosealicense.com/licenses/mit/) \
Icon is made by Emoji One, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0), via [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Eo_circle_purple_white_letter-x.svg)
Binary file added icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
77 changes: 39 additions & 38 deletions src/Xdg.Benchmarks/Program.fs
Original file line number Diff line number Diff line change
Expand Up @@ -7,51 +7,52 @@ open Xdg.Directories
#if WINDOWS
[<SimpleJob(RuntimeMoniker.Net481)>]
#endif
[<SimpleJob(RuntimeMoniker.Net70, baseline=true)>]
// [<SimpleJob(RuntimeMoniker.NativeAot70)>]
[<SimpleJob(RuntimeMoniker.Net80, baseline=true)>]
// [<SimpleJob(RuntimeMoniker.NativeAot80)>]
[<JsonExporterAttribute.Full>]
type Benchmarks() =
// Base Directory
[<Benchmark(Baseline=true)>]
member _.DataHome () = BaseDirectory.DataHome
[<Benchmark>]
member _.ConfigHome () = BaseDirectory.ConfigHome
[<Benchmark>]
member _.StateHome () = BaseDirectory.StateHome
[<Benchmark>]
member _.BinHome () = BaseDirectory.BinHome
[<Benchmark>]
member _.DataDirs () = BaseDirectory.DataDirs
[<Benchmark>]
member _.ConfigDirs () = BaseDirectory.ConfigDirs
[<Benchmark>]
member _.CacheHome () = BaseDirectory.CacheHome
[<Benchmark>]
member _.RuntimeDir() = BaseDirectory.RuntimeDir
//[<Benchmark>]
//member _.ConfigHome () = BaseDirectory.ConfigHome
//[<Benchmark>]
//member _.StateHome () = BaseDirectory.StateHome
//[<Benchmark>]
//member _.BinHome () = BaseDirectory.BinHome
//[<Benchmark>]
//member _.DataDirs () = BaseDirectory.DataDirs
// [<Benchmark>]
// member _.ConfigDirs () = BaseDirectory.ConfigDirs
//[<Benchmark>]
//member _.CacheHome () = BaseDirectory.CacheHome
//[<Benchmark>]
//member _.RuntimeDir() = BaseDirectory.RuntimeDir

// User Directories
[<Benchmark>]
member _.DesktopDir () = UserDirectory.DesktopDir
[<Benchmark>]
member _.DownloadDir () = UserDirectory.DownloadDir
[<Benchmark>]
member _.DocumentsDir () = UserDirectory.DocumentsDir
[<Benchmark>]
member _.MusicDir () = UserDirectory.MusicDir
[<Benchmark>]
member _.PicturesDir () = UserDirectory.PicturesDir
[<Benchmark>]
member _.VideosDir () = UserDirectory.VideosDir
[<Benchmark>]
member _.TemplatesDir () = UserDirectory.TemplatesDir
[<Benchmark>]
member _.PublicDir () = UserDirectory.PublicDir
// [<Benchmark>]
// member _.DesktopDir () = UserDirectory.DesktopDir
//[<Benchmark>]
//member _.DownloadDir () = UserDirectory.DownloadDir
//[<Benchmark>]
//member _.DocumentsDir () = UserDirectory.DocumentsDir
//[<Benchmark>]
//member _.MusicDir () = UserDirectory.MusicDir
//[<Benchmark>]
//member _.PicturesDir () = UserDirectory.PicturesDir
//[<Benchmark>]
//member _.VideosDir () = UserDirectory.VideosDir
//[<Benchmark>]
//member _.TemplatesDir () = UserDirectory.TemplatesDir
//[<Benchmark>]
//member _.PublicDir () = UserDirectory.PublicDir

// Other
[<Benchmark>]
member _.Home () = Other.Home
[<Benchmark>]
member _.Applications () = Other.Applications
[<Benchmark>]
member _.Fonts () = Other.Fonts
// [<Benchmark>]
// member _.Home () = Other.Home
//[<Benchmark>]
//member _.Applications () = Other.Applications
//[<Benchmark>]
//member _.Fonts () = Other.Fonts

BenchmarkRunner.Run<Benchmarks>() |> ignore
Loading

0 comments on commit d67d2b9

Please sign in to comment.